设计模式5:游戏线程和暂停

游戏线程的暂停,不需要让整个线程挂起。如果整个线程挂起,怎么恢复?

只需要为run函数的while循环内容加一个条件就行。

一、run函数的while循环条件
 

public void run() {
        System.out.println("== run -1");
      
        System.out.println("== run -2");
 //游戏进行中, 更多的状态表示,类名.static成员=类名.static常量 
        while (Tool.gamestate == 1) 
        {
            // 胜负判断
            Tool.updatewin(hero, boss);
            延时
        }    // end while

        if (Tool.gamestate != 1) // win , fail
		{
			new UIEnd(); // 弹出新窗口,新对话框
		}
		System.out.println("== run -3");
	}

二、为run函数的while循环内容加暂停条件

while (Tool.gamestate == 1) {
			// 暂停功能
			if (isPaused == 1) {
				Tool.sleep();
				continue;
			}
        //其他刷新
    //延时
}

暂停条件的修改,在鼠标或按钮事件中实现。

为键盘事件,单独写一个类,如果没有良好的架构,很难调整维护。即使运行正确,很难后续使用。

public class KeyPro implements KeyListener{

 
	public void keyReleased(KeyEvent e) {
		// TODO Auto-generated method stub
		System.out.println("== KeyPro keyReleased "+e.getKeyCode());
		if(e.getKeyCode() == KeyEvent.VK_Q) //81
		{
			Tool.pane.isPaused=1-Tool.pane.isPaused; // 0,1切换
		}
	}
	public void keyPressed(KeyEvent e) {
		// TODO Auto-generated method stub
		
	}
	public void keyTyped(KeyEvent e) {
		// TODO Auto-generated method stub
		
	}
}

这样一个暂停功能就做好了,数据不再刷新,画面也就没变化。

方便做游戏截图。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值