Citrus Engine关于创建Tiled Map游戏的小窍门

1.关于Hero,Enemy对象碰撞的问题

Citrus中的Hero,Enemy对象默认是相互碰撞的,不只是Hero和Enemy, Hero和Hero之间,Enemy和Enemy之间也会。这是因为这些对象实现了物理学,都定义成为了刚体。

在实际游戏中,角色和对人往往都是可以重合的,没有必要检测碰撞。

Citrus中暂时只能通过更改Hero,Enemy源代码来去除碰撞检测。通过更改他们的defineFixture方法可以达到目的。

_fixtureDef.filter.maskBits = PhysicsCollisionCategories.GetAllExcept("Items");
比如上面的代码是Enemy类defineFixture中的,表示出了Items对象都会发生碰撞,这也包括了enemy,hero,可以改成

_fixtureDef.filter.maskBits = PhysicsCollisionCategories.GetAllExcept("BadGuys");
这样就不会和自己同类的对象发生碰撞了,也就是说可以重叠显示了。


2.关于tiled map的一些问题

Citrus中能够解析tmx文件(tiled 生成)并自己创建platform对象,也就说只要你在场景中创建了物理世界,你创建的hero,enemy都会顺利地落在这些platform上面。

但是这有个问题,就说当platform位置比较低的时候,hero站在platform下面按空格跳跃会直接撞到上面的platform。解决这个需要在tmx文件的object层给类型为citrus.objects.platformer.box2d.Platform的对象设置属性oneway=true,这样hero只有从上面落下的时候和platform碰撞。


上图创建的地图中每个platform两旁创建了两个竖直的Object,这里我给他定义type为citrus.objects.platformer.box2d.Sensor,目的是防止怪物从这些较长的platform上面掉下来。


当然光这样做citrus是不会自己给你完成这样的功能的,还需要自己创建一个类,继承Enemy,重写他的handleBeginContact方法

public class Monster extends MyEnemy 
	{
		public function Monster(name:String, params:Object = null) 
		{
			super(name, params);
		}
		
		override public function handleBeginContact(contact:b2Contact):void {
			var obj:IBox2DPhysicsObject = Box2DUtils.CollisionGetOther(this, contact);
			if (obj is Sensor) {
				turnAround();
			}
			super.handleBeginContact(contact);
		}
		
		override public function handleEndContact(contact:b2Contact):void {
			super.handleEndContact(contact);
		}
	}
var obj:IBox2DPhysicsObject = Box2DUtils.CollisionGetOther(this, contact);
获取碰撞对象

if (obj is Sensor) {
	turnAround();
}
如果对象是我们创建在platform两头的Sensor,那怪物就要掉头了,也就掉不下去了。


大猩猩刚掉头^o^



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dyyaries

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值