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 将对象的单个实例添加到阶段_Actionscript 3_Flash_Instance - Fatal编程技术网

Actionscript 3 将对象的单个实例添加到阶段

Actionscript 3 将对象的单个实例添加到阶段,actionscript-3,flash,instance,Actionscript 3,Flash,Instance,晚上好, 我似乎无法让我的代码只向stage添加一个对象实例。它似乎至少向阶段添加了3个对象实例。添加的对象是r2、r3和r4 stop(); import flash.events.Event; stage.focus=stage; var upKeyDown5:Boolean = false; var rightKeyDown5:Boolean = false; var downKeyDown5:Boolean = false; var leftKeyDown5:Boolean = fal

晚上好,

我似乎无法让我的代码只向stage添加一个对象实例。它似乎至少向阶段添加了3个对象实例。添加的对象是r2、r3和r4

stop();

import flash.events.Event;
stage.focus=stage;
var upKeyDown5:Boolean = false;
var rightKeyDown5:Boolean = false;
var downKeyDown5:Boolean = false;
var leftKeyDown5:Boolean = false;
var enterkey:Boolean = false;
var interaction:Boolean = false;
p5.addEventListener(Event.ENTER_FRAME, moveChar5);
stage.addEventListener(KeyboardEvent.KEY_DOWN, checkKeysDown5);
stage.addEventListener(KeyboardEvent.KEY_UP, checkKeysUp5);
Mouse.hide();
function moveChar5(e:Event):void{
if(downKeyDown5 && !upKeyDown5 && !rightKeyDown5 && !leftKeyDown5)
{
    p5.gotoAndStop("walk_down");
    if(p5.y < 492.75)
        p5.y += 6;
}
if(upKeyDown5 && !downKeyDown5 && !rightKeyDown5 && !leftKeyDown5)
{
    p5.gotoAndStop("walk_up");
    if(p5.y > 202.85)
        p5.y -= 6;
}
if(rightKeyDown5 && !upKeyDown5 && !downKeyDown5 && !leftKeyDown5)
{
    p5.gotoAndStop("walk_right");
    if(p5.x < 871.5)
        p5.x += 6;
}
if(leftKeyDown5 && !upKeyDown5 && !rightKeyDown5 && !downKeyDown5)
{
    p5.gotoAndStop("walk_left");
    if(p5.x > 203.65)
        p5.x -= 6;
}
if(enterkey && interaction && p5.hitTestObject(c1)){
    if (!(Boolean(stage.getChildByName('r2')))) {
        var rat2:r2;
        rat2 = new r2();
        addChild(rat2);
        rat2.y=38;
        rat2.x=32;
    }
}
if(enterkey && interaction && p5.hitTestObject(c2)){
    if (!(Boolean(stage.getChildByName('r3')))) {
        var rat3:r3;
        rat3 = new r3();
        addChild(rat3);
        rat3.y=38;
        rat3.x=32;
    }
}
if(enterkey && interaction && p5.hitTestObject(c3)){
    if (!(Boolean(stage.getChildByName('r4')))) {
        var rat4:r4;
        rat4 = new r4();
        addChild(rat4);
        rat4.y=38;
        rat4.x=32;
    }
}
 }


 function checkKeysDown5(event:KeyboardEvent):void{
if(event.keyCode == 87){
    upKeyDown5 = true;
}
if(event.keyCode == 68){
    rightKeyDown5 = true;
}
if(event.keyCode == 83){
    downKeyDown5 = true;
}
if(event.keyCode == 65){
    leftKeyDown5 = true;
}
if (event.keyCode == 13){
    enterkey = true;
}
 }


 function checkKeysUp5(event:KeyboardEvent):void{
if(event.keyCode == 87){
    upKeyDown5 = false;
    p5.gotoAndStop("still_up");
}

if(event.keyCode == 68){
    rightKeyDown5 = false;
    p5.gotoAndStop("still_right");
}

if(event.keyCode == 65){
    leftKeyDown5 = false;
    p5.gotoAndStop("still_left");
}

if(event.keyCode == 83){
    downKeyDown5 = false;
    p5.gotoAndStop("still_down");
}

if (event.keyCode == 13){
    enterkey = false;
}

if(p5.hitTestObject(c1) || p5.hitTestObject(c2) || p5.hitTestObject(c3)){
    p5.gotoAndStop("interaction");
    interaction = true;
}
else
    interaction = false;
 }
stop();
导入flash.events.Event;
阶段。焦点=阶段;
var upKeyDown5:Boolean=false;
var rightKeyDown5:Boolean=false;
var downKeyDown5:Boolean=false;
var leftKeyDown5:Boolean=false;
var enterkey:Boolean=false;
变量交互:布尔=假;
p5.addEventListener(Event.ENTER_FRAME,moveChar5);
stage.addEventListener(KeyboardEvent.KEY_DOWN,checkKeysDown5);
stage.addEventListener(KeyboardEvent.KEY\u UP,checkKeysUp5);
鼠标隐藏();
函数moveChar5(e:事件):无效{
if(向下键5&&!向上键5&&!向右键5&&!向左键5)
{
p5.走到终点(“走到终点”);
如果(p5.y<492.75)
p5.y+=6;
}
如果(upKeyDown5&&!downKeyDown5&&!rightKeyDown5&&!leftKeyDown5)
{
p5.走到终点(“走到终点”);
如果(p5.y>202.85)
p5.y-=6;
}
如果(rightKeyDown5&!upKeyDown5&&!downKeyDown5&&!leftKeyDown5)
{
p5.走到终点站(“向右走”);
如果(p5.x<871.5)
p5.x+=6;
}
如果(leftKeyDown5&!upKeyDown5&&!rightKeyDown5&&!downKeyDown5)
{
p5.走到终点站(“向左走”);
如果(p5.x>203.65)
p5.x-=6;
}
if(enterkey&&interaction&&p5.hitTestObject(c1)){
if(!(布尔值(stage.getChildByName('r2')){
var-rat2:r2;
rat2=新的r2();
addChild(rat2);
rat2.y=38;
rat2.x=32;
}
}
if(enterkey&&interaction&&p5.hitTestObject(c2)){
if(!(布尔值(stage.getChildByName('r3')){
风险等级3:r3;
rat3=新的r3();
addChild(rat3);
rat3.y=38;
rat3.x=32;
}
}
if(enterkey&&interaction&&p5.hitTestObject(c3)){
if(!(布尔值(stage.getChildByName('r4')){
var rat4:r4;
rat4=新的r4();
addChild(rat4);
rat4.y=38;
rat4.x=32;
}
}
}
函数checkKeysDown5(事件:KeyboardEvent):无效{
如果(event.keyCode==87){
upKeyDown5=真;
}
如果(event.keyCode==68){
rightKeyDown5=真;
}
如果(event.keyCode==83){
downKeyDown5=真;
}
如果(event.keyCode==65){
leftKeyDown5=真;
}
如果(event.keyCode==13){
enterkey=true;
}
}
函数checkKeysUp5(事件:KeyboardEvent):无效{
如果(event.keyCode==87){
upKeyDown5=错误;
p5.停止(“静止”);
}
如果(event.keyCode==68){
rightKeyDown5=错误;
p5.gotoAndStop(“仍然正确”);
}
如果(event.keyCode==65){
leftKeyDown5=错误;
p5.停止(“仍然左”);
}
如果(event.keyCode==83){
downKeyDown5=假;
p5.停止(“静止”);
}
如果(event.keyCode==13){
enterkey=false;
}
if(p5.hitTestObject(c1)| p5.hitTestObject(c2)| p5.hitTestObject(c3)){
p5.gotoAndStop(“互动”);
互动=真实;
}
其他的
交互=假;
}

提前感谢

如果使用
开关
语句而不是所有这些if语句(如果您只希望满足其中一个条件,那么使用这些语句将更加高效和干净)

我认为你的问题与你追踪老鼠的方式有关——例如,使用
stage.getChildByName

下面是一个例子,以及一些关于您的其他潜在问题的注释

switch(true){
    case (enterkey && interaction && p5.hitTestObject(c1)):
        if (!(Boolean(stage.getChildByName('r2')))) {  //your not giving your rat a name so this will always return false, plus you're not adding the rat to the stage but to this class
            var rat2:r2;
            rat2 = new r2();
            addChild(rat2); //use stage.addChild if you want the above check (stage.getChildByName) to work
            rat2.y=38;
            rat2.x=32;
            rat2.name = "r2"; //if you want the above check to work

            break;  //break out of the switch if you don't want any of the others evaluate since this rat got added
        }

    //do a case for your other blocks
}
最好不要使用stage.getChidByName,而是创建如下方法:

function checkRatExists(ratClass:Class):Boolean {
    var tmp:DisplayObject;
    var i:int = numChildren;
    while(i--){
        tmp = getChildAt(i);
        if(tmp is ratClass){
            return true;
        }
    }
    return false;
}
然后使用该新函数,而不是stage.getChildByName:

if (!checkRatExists(r2)) //r2 is the class of rat you want to check

除了您的问题之外,创建一个方法/函数来进行rat定位和添加,而不是一次又一次地重复代码,这将更加简洁

function addRat(rat:RatCommonBaseClass, ratName:String):void {
        addChild(rat);
        rat.y=38;
        rat.x=32;
        rat.name = ratName;
}

//now you can just do this for all your rats:
addRat(new r2(),"r2);    

对于添加对象的语句,您没有else条件,因此最可能发生的情况是所有语句同时满足该条件。添加else语句应防止发生这种情况:

if(enterkey && interaction && p5.hitTestObject(c1)){
    if (!(Boolean(stage.getChildByName('r2')))) {
        var rat2:r2;
        rat2 = new r2();
        addChild(rat2);
        rat2.y=38;
        rat2.x=32;
    }
}
else if(enterkey && interaction && p5.hitTestObject(c2)){
    if (!(Boolean(stage.getChildByName('r3')))) {
        var rat3:r3;
        rat3 = new r3();
        addChild(rat3);
        rat3.y=38;
        rat3.x=32;
    }
}
else if(enterkey && interaction && p5.hitTestObject(c3)){
    if (!(Boolean(stage.getChildByName('r4')))) {
        var rat4:r4;
        rat4 = new r4();
        addChild(rat4);
        rat4.y=38;
        rat4.x=32;
    }
}

通过这种方式,它将首先检查p5是否命中c1,只有在未命中的情况下,它才会检查是否命中c2,然后再检查c3。

答案很好-而不是像我那样直接回答,你比他高了一步,给了他有用的提示和提示。@LondonDruges_MediaServices谢谢:)这非常有效。我在发布问题之前尝试了这个解决方案,但没有效果,但谢谢你的帮助。可能在不同的环境下工作。