山寨腾讯“爱消除”游戏之交换特效优化

【广而告之】山寨腾讯“爱消除”游戏已经正式入驻GitHub,项目地址是:https://github.com/3125788/CrazyLink

欢迎广大寨友一起来完善这个游戏。

这个山寨开源工程得到了以下网友的关注,在这里先谢过了!



在山寨腾讯“爱消除”游戏第四日的教程中,我们介绍了交换特效drawExchange的详细实现方法。这个特效一直沿用到现在。

细心的寨友可能已经发现了,如果用手指在屏幕上快速地乱滑,也就是在前一个交换动作没有彻底完成之前又开始另一个交换动作,屏幕上的显示会出现动物消失的情况,滑动的动作如果较慢,就不会有这种现象。

今天,我们就来解决这个问题。这个 解决问题的方法也可以用到其它特效上。

首先,我们用一个ArrayList来保存可操作的DrawExchange对象列表,取而代之原来仅有的一个DrawExchange对象。(红色是删除的代码,绿色是新替换的代码)


其次,我们新增了一个函数来处理交换特效对象列表的初始化:

	void initExchangeList()
	{
		DrawExchange drawExchange;
		for(int i = 0; i < CrazyLinkConstent.EXCHANGE_OBJ; i++)
		{
			drawExchange = new DrawExchange(drawAnimal);
			controlRegister(drawExchange.control);
			mDrawExchangeList.add(drawExchange);
		}
	}

第三步,增加一个获取DrawExchange对象的方法,如果没有可用的对象,则返回null,这个方法在触发交换动作EXCHANGE_START时会用到:

			case EXCHANGE_START:
			{
				clearAutoTip();
				Bundle b = msg.getData();
				int col1 = b.getInt("col1");
				int col2 = b.getInt("col2");
				int row1 = b.getInt("row1");
				int row2 = b.getInt("row2");				
		    	mStatus[col1][row1] = EFT_EXCHANGE;			//处于交换状态
		    	mStatus[col2][row2] = EFT_NONE;
		    	setSingleScorePosition(col1, row1);
		    	int pic1 = getPicId(col1, row1);
		    	int pic2 = getPicId(col2, row2);
		    	DrawExchange drawExchange = getDrawExchange();
		    	if(drawExchange != null) drawExchange.init(pic1, col1, row1, pic2, col2, row2);
				break;
			}


获取DrawExchang对象函数:

	static DrawExchange getDrawExchange()
	{
		DrawExchange drawExchange;
		CtlExchange ctl;
		for(int i = 0; i < CrazyLinkConstent.EXCHANGE_OBJ; i++)
		{
			drawExchange = mDrawExchangeList.get(i);
			ctl = (CtlExchange)drawExchange.control;
			if(!ctl.isRun()) return drawExchange;				
		}
		return null;
	}

第四步,新增交换渲染对象的执行函数,该函数在渲染EFT_EXCHANGE特效时会被调用:

				case EFT_EXCHANGE:	//交换特效
					drawExchangeRun(gl);							
					break;


交换特效执行函数:

	void drawExchangeRun(GL10 gl)
	{
		DrawExchange drawExchange;
		CtlExchange ctl;
		for(int i = 0; i < CrazyLinkConstent.EXCHANGE_OBJ; i++)
		{
			drawExchange = mDrawExchangeList.get(i);
			ctl = (CtlExchange)drawExchange.control;
			if(ctl.isRun()) drawExchange.draw(gl);				
		}		
	}

通过以上简单的四步,就实现了对交换特效的优化,优化后,玩家可用快速地随意在屏幕上快速滑动,多个交换特效会同时得到执行。这个改进可以让玩家更好地利用规则得到高分。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值