Actionscript 3 将对象的单个实例添加到阶段
晚上好, 我似乎无法让我的代码只向stage添加一个对象实例。它似乎至少向阶段添加了3个对象实例。添加的对象是r2、r3和r4Actionscript 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
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谢谢:)这非常有效。我在发布问题之前尝试了这个解决方案,但没有效果,但谢谢你的帮助。可能在不同的环境下工作。