您的位置:首页 > 其它

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

2013-11-24 22:00 302 查看
【广而告之】山寨腾讯“爱消除”游戏已经正式入驻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);				
		}		
	}


通过以上简单的四步,就实现了对交换特效的优化,优化后,玩家可用快速地随意在屏幕上快速滑动,多个交换特效会同时得到执行。这个改进可以让玩家更好地利用规则得到高分。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: