这是我第一次在这个论坛上发帖,所以如果我做错了,请告诉我。我正在尝试用as3制作游戏。在游戏中,您会看到一个代表颜色的单词。当你点击块消失时。问题是如何检查块是否在舞台上。因为虽然我点击块然后删除它,布尔似乎没有变为真。提前致谢
这里是我的所有代码,因此我创建了8个块,其中包含一个单词(代表一种颜色)。而我想要的是,一个randomely创建的单词与块中的那些单词相对应,如果你点击具有正确单词的单词,你就赢了。所以问题主要是关于他被评论出来的作品
package
{
import flash.display.Sprite;
import flash.events.Event;
import flash.text.TextField;
import flash.text.TextFormat;
import flash.events.MouseEvent;
import flash.utils.Timer;
import flash.events.TimerEvent;
[SWF(backgroundColor = "0x000000")]
public class Main extends Sprite
{
public var blok:blokken = new blokken();
public var blok2:blokken = new blokken();
public var blok3:blokken = new blokken();
public var blok4:blokken = new blokken();
public var blok5:blokken = new blokken();
public var blok6:blokken = new blokken();
public var blok7:blokken = new blokken();
public var blok8:blokken = new blokken();
public var kleuren:Array = new Array("rood", "blauw", "geel", "groen");
public var kleur:int = Math.floor(Math.random() * kleuren.length);
public var tekstKleur:TextField = new TextField;
public var grootheidswaanzin:TextFormat = new TextFormat();
public var aanwezig:Boolean = true;
public var tijdje:Timer = new Timer(15000,1);
public var eindTekst:TextField = new TextField;
public function Main()
{
grootheidswaanzin.size = 25;
tekstKleur.defaultTextFormat = grootheidswaanzin;
tekstKleur.text = kleuren[kleur];
tekstKleur.x = 415;
tekstKleur.y = 80;
tekstKleur.textColor = 0xFFFFFF;
addChild(tekstKleur);
eindTekst.x = 415;
eindTekst.y = 200;
eindTekst.textColor = 0xFFFFFF;
eindTekst.text = "je faalt";
eindTekst.defaultTextFormat = grootheidswaanzin;
blok.x = 315;
blok.y = 150;
blok.naamTekst("rood");
addChild(blok);
blok2.x = 440;
blok2.y = 150;
blok2.naamTekst("rood");
addChild(blok2);
blok3.x = 315;
blok3.y = 235;
blok3.naamTekst("blauw");
addChild(blok3);
blok4.x = 440;
blok4.y = 235;
blok4.naamTekst("blauw");
addChild(blok4);
blok5.x = 315;
blok5.y = 320;
blok5.naamTekst("geel");
addChild(blok5);
blok6.x = 440;
blok6.y = 320;
blok6.naamTekst("geel");
addChild(blok6);
blok7.x = 315;
blok7.y = 405;
blok7.naamTekst("groen");
addChild(blok7);
blok8.x = 440;
blok8.y = 405;
blok8.naamTekst("groen");
addChild(blok8);
tijdje.addEventListener(TimerEvent.TIMER, vijfSecondenRegel);
tijdje.start();
/*if (blok.stage || blok2.stage)
{
aanwezig = false;
}else
{
aanwezig = true;
trace (aanwezig);
}
trace (aanwezig);
if (kleuren[kleur] == "rood" && aanwezig == true)
{
trace ("victory");
}*/
}
public function vijfSecondenRegel(e:TimerEvent):void
{
removeEventListener(TimerEvent.TIMER,vijfSecondenRegel);
removeChild(blok);
removeChild(blok2);
removeChild(blok3);
removeChild(blok4);
removeChild(blok5);
removeChild(blok6);
removeChild(blok7);
removeChild(blok8);
removeChild(tekstKleur);
addChild(eindTekst);
}
}
}
package
{
import flash.display.Shape;
import flash.display.Sprite;
import flash.text.TextField;
import flash.events.MouseEvent;
import flash.text.TextFormat;
public class blokken extends Sprite
{
public var blokAchtergrond:Sprite = new Sprite;
public var tekstInBlok: TextField = new TextField;
public var TekstGrootte:TextFormat = new TextFormat();
public function blokken()
{
blokAchtergrond.graphics.beginFill(Math.random() * 0xFFFFFF);
blokAchtergrond.graphics.drawRect(0, 0, 120, 80);
addChild(blokAchtergrond);
TekstGrootte.size = 25;
tekstInBlok.defaultTextFormat = TekstGrootte;
tekstInBlok.width = 120;
tekstInBlok.height = 40;
tekstInBlok.y = 40;
tekstInBlok.x = 30;
addChild(tekstInBlok);
addEventListener(MouseEvent.MOUSE_DOWN, klikjes);
}
public function naamTekst(label:String):void
{
tekstInBlok.text = label;
}
public function klikjes(e:MouseEvent):void
{
removeChild(blokAchtergrond);
removeChild(tekstInBlok);
}
}
}
答案 0 :(得分:0)
您的问题是您在类的构造函数中设置了def keyPressEvent(self, event):
if event.key() in (Qt.Key_Backspace, Qt.Key_Delete):
self.delete()
QDialog.keyPressEvent(self, event)
var(它只运行一次,甚至在任何显示树内容都被初始化之前)。因此,如果稍后不再设置var,则值始终为SELECT Sum(IIf(tblEventPersonnel.[System Operator]="Person",1,0)) AS [CountOfSystem Operator],
Sum(IIf(tblEventPersonnel.[Test Engineer 1]="Person",1,0)) AS [CountOfTest Engineer 1]
FROM tblEventPersonnel;
。
对于boolean var来改变它的值,你必须有代码来更新它
因此,在删除块的同时,您必须更新该布尔值:
aanwezig
也许你想做的行为不是普通变量(如果你想要改变值就必须明确更新),创建一个getter函数:( getters / setters就像一个变量,但是每次访问时都使用函数计算返回值
true
然后当你执行:removeChild(blok);
aanwezig = false; //or however you compute the value
时,如果这些对象都不在显示列表中,它将返回true。
此外,它似乎在你的public function get aanwezig():Boolean {
return !blok.stage && !blok2.stage
}
类中,你只是删除块的子节点,而不是块本身(所以trace(aanwezig)
实际上仍然是真的,因为它仍然在显示列表中因为你只删除了它的孩子。)
而不是:
blokken
执行此操作(从父项中删除)
block2.stage