Actionscript 3 flashas3重用实例
我一直在尝试在AS3制作一个等距游戏。我使用movieclip来阻止角色在像树这样的对象中移动,但是我必须为我使用的每棵树给movieclip一个新的实例名,然后将其添加到一个名为barriersV的数组中 我想做的是只向数组中添加一个movieclip并以某种方式重用它,但据我所知,不能将实例名称与多个内容一起使用,只有最近的一个才能工作。有没有更好的方法获得同样的结果 这是我所有的密码:Actionscript 3 flashas3重用实例,actionscript-3,instance,flash-cs6,isometric,Actionscript 3,Instance,Flash Cs6,Isometric,我一直在尝试在AS3制作一个等距游戏。我使用movieclip来阻止角色在像树这样的对象中移动,但是我必须为我使用的每棵树给movieclip一个新的实例名,然后将其添加到一个名为barriersV的数组中 我想做的是只向数组中添加一个movieclip并以某种方式重用它,但据我所知,不能将实例名称与多个内容一起使用,只有最近的一个才能工作。有没有更好的方法获得同样的结果 这是我所有的密码: var isRight:Boolean=false var isLeft:Boolean=false v
var isRight:Boolean=false
var isLeft:Boolean=false
var isUp:Boolean=false
var isDown:Boolean=false
var isSpace:Boolean=false
var xspeed:Number=0
var yspeed:Number=0
var maxspeed:Number=9
var accel:Number=1
var sprites:Array = [];
var barriersV:Array = [];
var barriersH:Array = [];
var animationState:String = "idle";
var lastbtnpress:String = "none";
import flash.events.Event;
import flash.geom.Rectangle;
stage.addEventListener(Event.ENTER_FRAME, cameraFollowCharacter);
function cameraFollowCharacter(evt:Event){
root.scrollRect = new Rectangle(mc.x - stage.stageWidth/2, mc.y - stage.stageHeight/1.5, stage.stageWidth, stage.stageHeight);
}
stage.addEventListener(KeyboardEvent.KEY_DOWN, downKey);
function downKey(event:KeyboardEvent){
if(event.keyCode==68){
isRight=true
isLeft=false
mc.scaleX = +0.29;
}
if(event.keyCode==65){
isLeft=true
isRight=false
mc.scaleX = -0.29;
}
if(event.keyCode==87){
isUp=true}
if(event.keyCode==83){
isDown=true}
if(event.keyCode==32){
isSpace=true}
}
stage.addEventListener(KeyboardEvent.KEY_UP, upKey);
function upKey(event:KeyboardEvent){
if(event.keyCode==68){
isRight=false}
if(event.keyCode==65){
isLeft=false}
if(event.keyCode==87){
isUp=false}
if(event.keyCode==83){
isDown=false}
if(event.keyCode==32){
isSpace=false}
}
stage.addEventListener(Event.ENTER_FRAME, loop);
function loop(Event){
// if right is pressed and speed didnt hit the limit, increase speed
if(isRight==true && xspeed<maxspeed){xspeed+=4}
// if left is pressed and speed didnt hit the limit, increase speed (the other way)
if(isLeft==true && xspeed>-maxspeed){xspeed-=4}
// if speed is more than 0, decrease
if(xspeed>0){xspeed-=accel}
// if speed is less than 0, increase
if(xspeed<0){xspeed+=accel}
sortView()
// just like x, but with y
if(isDown==true && yspeed<maxspeed){yspeed+=4}
if(isUp==true && yspeed>-maxspeed){yspeed-=4}
if(yspeed>0){yspeed-=accel}
if(yspeed<0){yspeed+=accel}
// apply speed to movieclip
mc.x+=xspeed
mc.y+=yspeed
for(var i = 0; i < 500; i++)
if ((mc.x < barriersH[i].x) && barriersH[i].hitTestObject(mc.mcBounds)){
xspeed += 0;
mc.x = mc.x-9;
}
else if ((mc.x > barriersH[i].x) && barriersH[i].hitTestObject(mc.mcBounds)){
xspeed -= 0;
mc.x = mc.x+9;
}
for(var a = 0; a < 500; a++)
if ((mc.y < barriersV[a].y) && barriersV[a].hitTestObject(mc.mcBounds)){
yspeed += 0;
mc.y = mc.y-9;
}
else if ((mc.y > barriersV[a].y) && barriersV[a].hitTestObject(mc.mcBounds)){
yspeed -= 0;
mc.y = mc.y+9;
}
if(( isLeft == true || isRight == true || isUp == true || isDown == true || xspeed > accel || xspeed < accel *-1 || yspeed > accel|| yspeed < accel *-1)){
animationState = "running";
}
if (isSpace == true){
animationState = "jumping";
}
if(mc.currentLabel != animationState){
mc.gotoAndStop(animationState);
}
if(( isLeft == false || isRight == false || isUp == false || isDown == false || xspeed == 0|| yspeed == 0)){
animationState = "idle";
}
}
for(var a = 0; a < 500; a++)
{
var barrierV:Sprite = new Sprite();
barrierV.x = Math.random() * stage.stageHeight;
barrierV.y = Math.random() * stage.stageWidth;
barrierV.graphics.lineStyle(2, 0);
barrierV.graphics.beginFill(0xFF0000);
barrierV.graphics.drawRect(0, 0, 50, 50);
barrierV.graphics.endFill();
barriersV.push( autumTree2V );
barriersV.push( autumTree1V );
barriersV.push( autumTree3V );
barriersV.push( rockV );
}
for(var i = 0; i < 500; i++)
{
var barrierH:Sprite = new Sprite();
barrierH.x = Math.random() * stage.stageHeight;
barrierH.y = Math.random() * stage.stageWidth;
barrierH.graphics.lineStyle(2, 0);
barrierH.graphics.beginFill(0xFF0000);
barrierH.graphics.drawRect(0, 0, 50, 50);
barrierH.graphics.endFill();
barriersH.push( H1 );
}
for(var j = 0; j < 500; j++)
{
var sprite:Sprite = new Sprite();
sprite.x = Math.random() * stage.stageHeight;
sprite.y = Math.random() * stage.stageWidth;
sprite.graphics.lineStyle(2, 0);
sprite.graphics.beginFill(0xFF0000);
sprite.graphics.drawRect(0, 0, 50, 50);
sprite.graphics.endFill();
sprites.push( mc );
sprites.push( grass );
sprites.push( grass2 );
sprites.push( grass3 );
sprites.push( grass4 );
sprites.push( rock );
sprites.push( autumTree1 );
sprites.push( autumTree2 );
sprites.push( autumTreeRed1 );
}
function sortView():void
{
// Sort the content of 'sprites'.
sprites.sortOn("y", Array.NUMERIC);
for each(var j in sprites)
{
// Then add each to the display list in the new order.
addChild(j);
}
}
var isRight:Boolean=false
var isLeft:Boolean=false
变量isUp:Boolean=false
var isDown:Boolean=false
var isSpace:Boolean=false
var xspeed:Number=0
var Y速度:数字=0
var maxspeed:Number=9
var加速度:数字=1
变量sprites:Array=[];
var barriersV:Array=[];
var-barriers:Array=[];
var animationState:String=“idle”;
var lastbtnpress:String=“无”;
导入flash.events.Event;
导入flash.geom.Rectangle;
stage.addEventListener(Event.ENTER_FRAME,cameraFollowCharacter);
函数cameraFollowCharacter(evt:Event){
root.scrollRect=新矩形(mc.x-stage.stageWidth/2,mc.y-stage.stageHeight/1.5,stage.stageWidth,stage.stageHeight);
}
stage.addEventListener(KeyboardEvent.KEY\u DOWN,DOWN键);
功能下键(事件:键盘事件){
if(event.keyCode==68){
isRight=true
isLeft=false
mc.scaleX=+0.29;
}
if(event.keyCode==65){
isLeft=true
isRight=false
mc.scaleX=-0.29;
}
if(event.keyCode==87){
isUp=true}
if(event.keyCode==83){
isDown=true}
if(event.keyCode==32){
isSpace=true}
}
stage.addEventListener(KeyboardEvent.KEY\u UP,upKey);
功能向上键(事件:键盘事件){
if(event.keyCode==68){
isRight=false}
if(event.keyCode==65){
isLeft=false}
if(event.keyCode==87){
isUp=false}
if(event.keyCode==83){
isDown=false}
if(event.keyCode==32){
isSpace=false}
}
stage.addEventListener(Event.ENTER_FRAME,循环);
函数循环(事件){
//如果右键按下且速度未达到极限,则增加速度
如果(isRight==true&&xspeed maxspeed){xspeed-=4}
//如果速度大于0,则减小
如果(xspeed>0){xspeed-=accel}
//如果速度小于0,则增加
如果(xspeed0){yspeed-=accel}
if(yspeed barriers[i].x)和&barriers[i].hitTestObject(mc.mcBounds)){
xspeed-=0;
mc.x=mc.x+9;
}
对于(var a=0;a<500;a++)
if((mc.ybarriersV[a].y)和&barriersV[a].hitTestObject(mc.mcBounds)){
y速度-=0;
mc.y=mc.y+9;
}
如果((isLeft==true | | | isRight==true | | | isUp==true | | isDown==true | | xspeed>accel | | xspeedaccel | yspeed
Hmm。你说你的游戏场地上有很多树,你想让它们都成为障碍。这意味着您需要为它们中的每一个设置单独的屏障对象。一、 但是,您看到的不是将barrierH
对象推入barrierH
数组,而是一个预先放置的实例H1
,连续500次。与barriersV
和sprites
阵列相同-sprites
的长度将不是10,而是5000!然后您将连续500次addChild()
其中一个对象!确实,这段代码需要一些认真的重构:)是的,我做了很多这段代码,但对它的功能一无所知,然后离开了它,几个月后回来,对我所做的有了一点更好的了解,因此,我知道其中有一些代码需要整理,但现在请忽略它。我需要更改什么来修复这些问题?我不知道“for(var j=0;j<500;j++)”有什么作用。这就是我需要改变的吗?