塔防游戏(一) 挖坑(Auto-batching)

做塔防游戏嘛,地图应该是一大堆格子,相当于种萝卜的坑嘛,防御塔的大小是3*3还是4*4就看以后需要了,嗯,先挖坑,哈哈..


cocos-2d-x 3.0里有一个Auto-batching功能,可以让拥有同种文理的精灵在同一批次中进行渲染,但在使用时有个需要注意的地方


注:默认分辨率设为1280*720,至于原因嘛,我的笔记本是1080P的,720P的游戏加上窗口外框不会超过屏幕范围,调试方便。

代码一:

bool Table::init()//初始化函数
{
	Sprite* sp = NULL;

	for (int i = 0; i < 36; i++)
	{
		for (int j = 0; j < 64; j++)
		{
			position[i][j] = NULL;
			if (i%2 == 0 && j%2 == 0)
			{
				sp = Sprite::create("picture\\RedBlock.png");
			}
			if (i%2 != 0 && j%2 == 0)
			{
				sp = Sprite::create("picture\\YellowBlock.png");
			}
			if (i%2 != 0 && j%2 != 0)
			{
				sp = Sprite::create("picture\\BlueBlock.png");
			}
			if (i%2 == 0 && j%2 != 0)
			{
				sp = Sprite::create("picture\\GreenBlock.png");
			}
			sp->setPosition(j*20+10,i*20+10);
			this->addChild(sp,0);
		}
	}

	return true;
}
运行结果:

GL calls:2305


代码二:

bool Table::init()//初始化函数
{
	Sprite* sp = NULL;
	for (int i = 0; i < 36; i++)
	{
		for (int j = 0; j < 64; j++)
		{
			position[i][j] = NULL;
		}
	}
	for (int i = 0; i < 36; i++)
	{
		for (int j = 0; j < 64; j++)
		{
			if (i%2 == 0 && j%2 == 0)
			{
				sp = Sprite::create("picture\\RedBlock.png");
				sp->setPosition(j*20+10,i*20+10);
				this->addChild(sp,0);
			}
		}
	}
	for (int i = 0; i < 36; i++)
	{
		for (int j = 0; j < 64; j++)
		{
			if (i%2 != 0 && j%2 == 0)
			{
				sp = Sprite::create("picture\\YellowBlock.png");
				sp->setPosition(j*20+10,i*20+10);
				this->addChild(sp,0);
			}
		}
	}
	for (int i = 0; i < 36; i++)
	{
		for (int j = 0; j < 64; j++)
		{
			if (i%2 != 0 && j%2 != 0)
			{
				sp = Sprite::create("picture\\BlueBlock.png");
				sp->setPosition(j*20+10,i*20+10);
				this->addChild(sp,0);
			}
		}
	}
	for (int i = 0; i < 36; i++)
	{
		for (int j = 0; j < 64; j++)
		{
			if (i%2 == 0 && j%2 != 0)
			{
				sp = Sprite::create("picture\\GreenBlock.png");
				sp->setPosition(j*20+10,i*20+10);
				this->addChild(sp,0);			
			}
		}
	}
	return true;
}

运行结果

GL calls:5


两个代码实现的功能一样,都是把红黄蓝绿的格子显示在屏幕上

代码一的代码比较简单只用了一个循环,四种颜色的块交替显示在屏幕上(渲染顺序是:红黄蓝绿、红黄蓝绿、红黄蓝绿......渲染完成)GL calls:2305

代码二的代码长了一些,用了4个循环分别渲染每种颜色(渲染顺序是:红、红、红...黄、黄、黄...蓝、蓝、蓝...绿、绿、绿...渲染完成)GL calls:5

可见想要同批次渲染一堆纹理相同的精灵,需要让他们一起出现!


当精灵数量很多的时候Auto-batching就会很好用了(比如显示一大堆沙子...)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值