Xcode 落在cocos2d中的精灵
我有两个水平移动的精灵,当它们撞到墙上时,我需要它们自然落下。 我知道如何用一种简单的方法来改变每一帧的位置,但这似乎并不自然,也可能不是正确的方法 当考虑到速度和y轴时,有一种方法可以发现碰撞,然后使它们坠落 我只是找不到一个简单的方法用box2d或花栗鼠来做 任何方向都很好。Xcode 落在cocos2d中的精灵,xcode,cocos2d-iphone,box2d,Xcode,Cocos2d Iphone,Box2d,我有两个水平移动的精灵,当它们撞到墙上时,我需要它们自然落下。 我知道如何用一种简单的方法来改变每一帧的位置,但这似乎并不自然,也可能不是正确的方法 当考虑到速度和y轴时,有一种方法可以发现碰撞,然后使它们坠落 我只是找不到一个简单的方法用box2d或花栗鼠来做 任何方向都很好。 thanx.使用任何phys引擎,只需设置世界上正确的重力(box2D的情况下为b2World),并设置身体的初始速度。因此,它将自然下降如果您自己设置速度,则取决于您使其看起来自然:) 改变速度的垂直部分不是一个好主
thanx.使用任何phys引擎,只需设置世界上正确的重力(box2D的情况下为b2World),并设置身体的初始速度。因此,它将自然下降如果您自己设置速度,则取决于您使其看起来自然:) 改变速度的垂直部分不是一个好主意-保持原样即可:
b2Vec2 vel = body->GetLinearVelocity();
vel.x = ...;
body->SetLinearVelocity( vel );
首先,将自定义联系人侦听器添加到您的b2World
public class Main
{
public function Main()
{
//init stuff
var cc:CustomContactListener = new CustomContactListener();
world.setContactListener(cc);
}
}
//then on hit call the hit function on sprite
public class CustomContactListener extends b2ContactListener
{
//Called when a contact point is added.
public override function Add(point:b2ContactPoint):void
{
//checks if the first shape is a sprite and second is a wall if true call Hit
if (point.shape1.GetBody().GetUserData().isSprite && point.shape2.GetBody().GetUserData().isWall)
{
point.shape1.GetBody().GetUserData().Hit();
}
else if (point.shape2.GetBody().GetUserData().isSprite && point.shape1.GetBody().GetUserData().isWall)
{
point.shape2.GetBody().GetUserData().Hit();
}
}
}
public class Sprite
{
public var hit:Boolean = false;
//Set hit to true and start applying realistic downward force
public function Hit()
{
hit = true;
}
//Enter frame event that applies force
public function step(e:Event)
{
if (hit)
{
b2Vec2 force = new b2Vec2(0, -9.8);
bodyOfSprite.ApplyLinearForce(force);
}
}
}
这取决于将所有实体的userdata设置为保存它的类。i、 雪碧,墙。你也可以用相反的方法,一直施加重力,同时施加相反的力。然后,当你与墙壁接触时,你停止施加其他力,重力生效
或者像@iforce2d所说的,只需检查精灵主体的linearvelocity是否接近或等于零,因为这表明它击中了阻止它的东西,而不仅仅是墙壁,然后您可以将hit设置为true。步进函数将完成其余部分。这是有限的,因为它只是需要它放慢速度来触发它,而不是撞到一堵可能不需要的墙