游戏状态

作为一种代码风格,也为了帮你模块你的代码,我推荐在游戏循环里像这样组织你的代码:

  1. //Set the game state
  2. state = play;
  3. //Start the game loop
  4. app.ticker.add(delta => gameLoop(delta));
  5. function gameLoop(delta){
  6. //Update the current game state:
  7. state(delta);
  8. }
  9. function play(delta) {
  10. //Move the cat 1 pixel to the right each frame
  11. cat.vx = 1
  12. cat.x += cat.vx;
  13. }

你会看到gameLoop每秒60次调用了state函数。state函数是什么呢?它被赋值为 play。意味着play函数会每秒运行60次。

下面的代码告诉你如何用这个新模式来重构上一个例子的代码:

  1. //Define any variables that are used in more than one function
  2. let cat, state;
  3. function setup() {
  4. //Create the `cat` sprite
  5. cat = new Sprite(resources["images/cat.png"].texture);
  6. cat.y = 96;
  7. cat.vx = 0;
  8. cat.vy = 0;
  9. app.stage.addChild(cat);
  10. //Set the game state
  11. state = play;
  12. //Start the game loop
  13. app.ticker.add(delta => gameLoop(delta));
  14. }
  15. function gameLoop(delta){
  16. //Update the current game state:
  17. state(delta);
  18. }
  19. function play(delta) {
  20. //Move the cat 1 pixel to the right each frame
  21. cat.vx = 1
  22. cat.x += cat.vx;
  23. }

是的,我知道这有点儿 head-swirler! 但是,不要害怕,花几分钟在脑海中想一遍这些函数是如何联系在一起的。正如你将在下面看到的,结构化你的游戏循环代码,会使得切换游戏场景和关卡这种操作变得更简单。