超级玛丽制作揭秘6时钟控制 类MYCLOCK

本文介绍了超级玛丽游戏中的MYCLOCK类,用于控制游戏时间,包括时间点减一、计时秒数重置等功能。MYCLOCK类用于处理WM_TIMER消息,控制游戏逻辑的更新频率,例如背景移动、角色生成等。通过实例展示了如何在不同时间点触发特定游戏事件,如蘑菇兵生成、背景移动等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

类说明:时间就是生命。这对于游戏来说,最为准确。游戏程序只做两件事:显示图片、处理逻辑。更准确的说法是:每隔一段时间显示图片并处理逻辑。程序中,要设置一个定时器。这个定时器会每隔一段时间发出一个WM_TIMER消息。在该消息的处理中,先逻辑处理。逻辑处理完毕,通过InvalidateRect函数发出WM_PAINT消息,显示各种图片。游戏就不停地运行下去,直至程序结束。

时间表示:用一个整数iNum表示当前时间,游戏中的时间是1,2,3, … , n, 1,2,3, … ,n 不停循环.假设1秒内需要25个WM_TIMER消息(每40毫秒1次),则n=25. 也可以用一个变量,统计过了几秒。

控制事件频率的方法:
一秒内发生多次
以游戏背景图片为例, 每秒移动5下, 可以在iNum为5,10,15,20,25这5个时间点上移动.即iNum可以被5整除时,修改背景图片的坐标.
一秒内发生一次
例如火圈, 每秒产生一个新的蘑菇兵. 可以随便指定一个时间点,如20. 当iNum等于20时,生成一个蘑菇兵。
多秒内发生一次
需要一个辅助变量iNumShow,统计时间过了几秒。每隔一秒iNumShow减1,当iNumShow等于0时处理逻辑。

成员函数功能列表:(所有函数都是内联函数)
class MYCLOCK
{
public:
 //构造函数 初始化所有变量
 MYCLOCK()
 {
  iNum=0;//时间点
  iIsActive=0;//是否已经开始计时
  iNumShow=0;//计时秒数
  iElapse=100;//默认每100ms发一个WM_TIMER消息
  ishow=0; //是否显示时间
 }
 //析构函数 销毁计时器
 ~MYCLOCK()
 {
  Destroy();
 }

 //功能 开始计时, 产生WM_TIEMR消息的时间间隔为elapse.
 //     设置计时秒数(timetotal).
 //入参 窗口句柄 时间间隔 计时秒数
 void Begin(HWND hw,int elapse,int timetotal)
 {
  if(iIsActive)
   return;//已经启动了,直接返回

  hWnd=hw;
 &n

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值