Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 flashas3重用实例_Actionscript 3_Instance_Flash Cs6_Isometric - Fatal编程技术网

Actionscript 3 flashas3重用实例

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

我一直在尝试在AS3制作一个等距游戏。我使用movieclip来阻止角色在像树这样的对象中移动,但是我必须为我使用的每棵树给movieclip一个新的实例名,然后将其添加到一个名为barriersV的数组中

我想做的是只向数组中添加一个movieclip并以某种方式重用它,但据我所知,不能将实例名称与多个内容一起使用,只有最近的一个才能工作。有没有更好的方法获得同样的结果

这是我所有的密码:

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++)”有什么作用。这就是我需要改变的吗?