if 语句不检查变量的数量是否增加
An if statement isn't checking if a variable has increased in amount or not
我正在 Flash 开发中使用 AS3 编程。我正在使用一个名为 flashpunk 的程序,它为 类 添加了多个预设,我可以使用它们来简化编程。我有一个 if 语句,它应该在变量等于 1 时添加一个新图形。如果用户在键盘上按下一个,那么该变量确实会增加 1。但是当变量增加 1 并且 if 语句应该检查如果它是一个,它也不会像预期的那样添加新图形。我确实有 if 语句和不同 类 中的变量,我不确定我是否可以这样做,这是代码。不起作用的 if 语句是应该添加新背景的语句1。
章节
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);
}
}
}
}
主菜单
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);
}
}
}
问题是您的代码在 World class 构造函数中。 Flashpunk 的游戏对象理念是将实体添加到世界中。添加后,World 会在每一帧运行 update()
方法,同时它也会运行每个 Entity 的 update()
方法。您在构造函数中的 if
语句将始终产生 false,因为尚未执行更新。
如果我理解正确的话,你想在用户按下 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);
}
}
我正在 Flash 开发中使用 AS3 编程。我正在使用一个名为 flashpunk 的程序,它为 类 添加了多个预设,我可以使用它们来简化编程。我有一个 if 语句,它应该在变量等于 1 时添加一个新图形。如果用户在键盘上按下一个,那么该变量确实会增加 1。但是当变量增加 1 并且 if 语句应该检查如果它是一个,它也不会像预期的那样添加新图形。我确实有 if 语句和不同 类 中的变量,我不确定我是否可以这样做,这是代码。不起作用的 if 语句是应该添加新背景的语句1。
章节
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);
}
}
}
}
主菜单
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);
}
}
}
问题是您的代码在 World class 构造函数中。 Flashpunk 的游戏对象理念是将实体添加到世界中。添加后,World 会在每一帧运行 update()
方法,同时它也会运行每个 Entity 的 update()
方法。您在构造函数中的 if
语句将始终产生 false,因为尚未执行更新。
如果我理解正确的话,你想在用户按下 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);
}
}