我正在使用Flash开发的AS3编程。我正在使用一个名为flashpunk的程序,它为类添加了多个预设,我可以使用它来更容易编程。我有一个if语句,当一个变量等于1时,它应该添加一个新图形。如果用户在键盘上按下一个,那么该变量确实增加1.但是当变量增加1并且if语句应该检查时如果它是一个,它也不会添加像它一样的新图形。我确实在不同的类中有if语句和变量,我不确定我是否可以这样做,这是代码。不起作用的if语句是应该添加新background1的语句。
章
package
{
import net.flashpunk.Entity;
import net.flashpunk.World;
import net.flashpunk.utils.Input;
import net.flashpunk.utils.Key;
public class Chapter extends World
{
public var mainmenu:MainMenu;
public var background1:Background1;
public function Chapter()
{
mainmenu = new MainMenu();
add(mainmenu);
background1 = new Background1();
if(mainmenu.YesNo == 1)
{
add(background1);
}
}
}
}
的MainMenu
package
{
import flash.events.TimerEvent;
import flash.utils.Timer;
import net.flashpunk.Entity;
import net.flashpunk.graphics.Image;
import net.flashpunk.utils.Input;
import net.flashpunk.utils.Key;
import net.flashpunk.FP;
public class MainMenu extends Entity
{
[Embed(source = "net/MainScreen.png")]
private const SPRITE1:Class;
public var YesNo:int = 0
private var sprite1:Image = new Image(SPRITE1);
public function MainMenu()
{
graphic = sprite1;
sprite1.centerOrigin();
x = 200
y = 150
layer = 150
}
override public function update():void
{
if (Input.pressed(Key.DIGIT_1))
{
YesNo = YesNo + 1;
}
trace(YesNo);
}
}
}
答案 0 :(得分:1)
问题是你的代码是在World类构造函数中。 Flashpunk对游戏对象的想法是将实体添加到Worlds中。添加后,World会在每个帧中运行update()
方法,在该方法中,它也会运行每个实体的update()
。你的if
语句在构造函数中总是会产生错误,因为还没有执行更新。
如果我理解正确,您希望在用户按1后添加后台实体。您可以这样做:
// in MainMenu class
override public function update():void
{
if (Input.pressed(Key.DIGIT_1))
{
world.add(new Background1());
}
}
如果您想要保留对此实体的引用,您可以:
override public function update():void
{
if (Input.pressed(Key.DIGIT_1))
{
Chapter(world).background1 = new Background1(); // note the casting of World to Chapter
world.add(Chapter(world).background1);
}
}