鱼C论坛

 找回密码
 立即注册
查看: 738|回复: 4

cocos2d布子延时及一键清屏

[复制链接]
发表于 2025-1-15 18:01:39 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
五子棋演示必胜招法,要求每布一子延时1秒,显示动画效果。
布子完成后停留3秒,回到无子界面。或者一键清屏。
下面代码延时及清屏无效果。
  1. import cocos
  2. from cocos.scene import Scene
  3. from cocos.director import director
  4. from pyglet.window import key
  5. qizi = []
  6. bo = None
  7. class GameLayer(cocos.layer.ColorLayer):
  8.     global qizi, bo
  9.     def __init__(self):
  10.         super().__init__(22, 142, 202, 255)
  11.         cocos.layer.Layer.is_event_handler = True
  12.         bg = cocos.sprite.Sprite('bc55.jpg')
  13.         bg.position = (350, 350)
  14.         self.add(bg)

  15.     def display(self):
  16.         positions = [(9, 9), (10, 9), (8, 6), (9, 8), (6, 8), (8, 7), (7, 6), (11, 10),
  17.                     (12, 11), (12, 9), (6, 6), (9, 6), (7, 7)]
  18.         for i in range(13):
  19.             if i % 2 == 0:
  20.                 bo = cocos.sprite.Sprite('3.png')
  21.             else:
  22.                 bo = cocos.sprite.Sprite('4.png')
  23.             bo.position = (35 + (positions[i][0]) * 45, 35 + (positions[i][1]) * 45)
  24.             self.do(cocos.actions.Delay(1))
  25.             self.add(bo)
  26.             qizi.append(bo)

  27.         self.do(cocos.actions.Delay(3))
  28.         return

  29.     def on_key_press(self, k, _):
  30.         global qizi, bo
  31.         if k == key.SPACE:
  32.             self.display()

  33.         if k == key.ENTER:
  34.             self.remove(bo)
  35.             qizi = []

  36. director.init(800, 700, caption="五子棋")
  37. mainscene = Scene()
  38. mainscene.add(GameLayer(), z=1)
  39. director.run(mainscene)
复制代码

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2025-1-15 19:14:15 | 显示全部楼层
以上两个答案都实现了一键清屏的效果,但都未实现按顺序依次出现的效果。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-1-16 07:40:22 | 显示全部楼层
想到了一个办法。因为单用Delay无延时效果,各子总是同时出现。
那就分两步走,先让各子同时出现在一个不显眼位置,再用Delay+Place
组合,分别延时,就让各子按顺序出现在预定位置。
  1. import cocos
  2. from cocos.scene import Scene
  3. from cocos.director import director
  4. from pyglet.window import key
  5. from cocos.actions import *

  6. qizi = []
  7. bo = None

  8. class GameLayer(cocos.layer.ColorLayer):
  9.     def __init__(self):
  10.         super().__init__(22, 142, 202, 255)
  11.         cocos.layer.Layer.is_event_handler = True
  12.         bg = cocos.sprite.Sprite('bc55.jpg')
  13.         bg.position = (350, 350)
  14.         self.add(bg)

  15.     def display(self):
  16.         positions = [(9, 9), (10, 9), (8, 6), (9, 8), (6, 8), (8, 7), (7, 6), (11, 10),
  17.                     (12, 11), (12, 9), (6, 6), (9, 6), (7, 7)]
  18.         for i in range(13):
  19.             if i % 2 == 0:
  20.                 bo = cocos.sprite.Sprite('3.png')
  21.             else:
  22.                 bo = cocos.sprite.Sprite('4.png')
  23.             bo.position = (0, 0)
  24.             self.add(bo)
  25.             bo.do(Delay(i * 3) + Place((35 + (positions[i][0]) * 45, 35 + (positions[i][1]) * 45)))
  26.             qizi.append(bo)

  27.     def on_key_press(self, k, _):
  28.         if k == key.SPACE:
  29.             self.display()

  30.         if k == key.ENTER:
  31.             for piece in qizi:
  32.                 self.remove(piece)
  33.             qizi.clear()

  34. director.init(800, 700, caption="五子棋")
  35. mainscene = Scene()
  36. game = GameLayer()
  37. mainscene.add(game, z=1)
  38. director.run(mainscene)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-10-27 03:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表