滚动背景的制作以及简单的碰撞检测

         今天分享一下滚动背景的制作以及简单的碰撞检测,来源是书上的一个小例子,自己稍加改变以后提出出来分享一下,如图所示:

 

 

         素材是一张宽2000像素的白云和一张2000像素的地面图片。一般的情况下,我们就是利用move的动作指令是图片缓缓移动,移动2000像素之后使用place动画让图片回到原位继续变化。但是在这个过程中你会发现有一段时间导致了背景图层出现了空缺,如图所示。


 

 

因此在这种情况下,我们需要截取图片最前面的几百个像素拼接在2000像素的大图后面,这样一来就不会出现背景空缺的情况了,代码如下:

auto node = ParallaxNode::create();
	this->addChild(node);

	auto action_0 = MoveBy::create(20.0, Point(-2000, 0));
	auto action_1 = Place::create(Point::ZERO);
	auto action_2 = Sequence::create(action_0, action_1, NULL);
	auto action_3 = RepeatForever::create(action_2);
	node->runAction(action_3);

	auto spr_0 = Sprite::create("bg1.png");
	spr_0->setAnchorPoint(Point::ZERO);
	node->addChild(spr_0, 0, Point(1, 0), Point::ZERO);

	auto spr_1 = Sprite::create("bg1.png", Rect(0, 0, 480, 320));
	spr_1->setAnchorPoint(Point::ZERO);
	node->addChild(spr_1, 0, Point(1, 0), Point(2000, 0));



 

 

 

还有一点要注意的是,如果是地面与天空两者同时在移动,那么一般我们会把两者的速度变得不同,这游戏画面才会更加真实美观,这样的话就要根据两者速度比例来设置图片的长短比例了。假如我设置天空的速度是地面的两倍,那么天空滚动2000像素就需要我们地面滚动4000像素,同样的也要在最后加上几百像素的画面填充以免出现空白。这样的话,就可以成功实现整个背景的滚动了。

 

 

接下来再讲一下怎么实现简单的碰撞检测,一般在开发游戏的时候,这个基本是在每一个游戏中必须使用的一点。

我用的是cocos2dx3.6版本的,可能有时候新旧版本语法不一。一般我们要先获取到你所要检测的两个碰撞的物体,可以通过tag值来获取,然后通过getBoundingBox的方法来获取到你的物体的范围大小,再通过intersectsRect来判断两者是否碰撞。

一般我们检测碰撞是要实时进行检测的,这就又要涉及到一个schedule的一个update实时检测更新碰撞的结果。Schedule是一个关于时间的一个类,简单地使用直接砍我的代码就好啦!下面贴代码!

先在初始化函数中调用update。

this->scheduleUpdate();

void Game::update(float delta)
{
	if (this->getChildByTag(TAG_SPRITE_BLOCK) != NULL) {

		Sprite *sprMan = (Sprite*)this->getChildByTag(TAG_SPRITE_MAN);
		Sprite *sprBlock = (Sprite*)this->getChildByTag(TAG_SPRITE_BLOCK);

		Rect rectMan = sprMan->getBoundingBox();
		Rect rectBlock = sprBlock->getBoundingBox();

		if (rectMan.intersectsRect(rectBlock)) {
			Director::getInstance()->pause();
			isStop = true;
		}
	}
}


 

 

当然这个小游戏里面还涉及到了一个touch的事件监听,来进行跳跃,下一次自己研究更深入一些之后再来分享。

可能我分享的很多也会有一些错误,如果大家看到不对的地方,也希望可以帮忙指出改正,共同进步!



 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值