如何制作单向平台,如果按下按钮我可以在上面下来
How to make one way platform on which i can come down if button pressed
所以,我想要的是:
- 如果我的玩家的 body 线性 velocity.y > 0 则通过平台移动。
- 如果我的玩家 body 与平台发生碰撞并按下按钮 "DOWN",请向下移动通过它
我试过的:
switch (fixA.getFilterData().categoryBits | fixB.getFilterData().categoryBits) {
case Game.PLATFORM_BIT | Game.PLAYER_BIT:
if (playerBody == contactEntityA.getBody()) {
if (playerBody.getBody().getPosition().y <
contactEntityB.getBody().getPosition().y + .5 || playerController.isDownPressed()) { // .5 is half height of platform body
contact.isEnabled = false;
}
} else {
if (playerBody.getBody().getPosition().y <
contactEntityA.getBody().getPosition().y + .5 || playerController.isDownPressed()) { // .5 is half height of platform body
contact.isEnabled = false;
}
}
break;
}
我的问题是:
如果 body 几秒钟没有移动,Box2d 就不会建立联系。所以一段时间后,联系不上了,我不能往下移动。
您可以尝试这样的操作:
object DisableContact: ContactListener {
override fun beginContact(contact: Contact) {
}
override fun endContact(contact: Contact) {
}
override fun preSolve(contact: Contact, oldManifold: Manifold?) {
val playerBody = contact.fixtureA.body!! // need to identify if fixtureA or fixtureB is the player body
if (playerBody.linearVelocity.y < -3.5f) {
contact.isEnabled = false
}
}
override fun postSolve(contact: Contact, impulse: ContactImpulse?) {
}
}
试试 box 2D 中的传感器,这样它就不会与任何物体发生碰撞,并且肯定会接受事件。
当您需要物理方面时,最好使用 box2D
简单的 hack 帮助了我。我只是对每帧 body 应用很小的速度。
playerBody.applyLinearImpulse(0f, .000001f, .5f, .5f, true);
我不确定这是最好的解决方案,如果您知道如何做得更好,请写信给我。
所以,我想要的是:
- 如果我的玩家的 body 线性 velocity.y > 0 则通过平台移动。
- 如果我的玩家 body 与平台发生碰撞并按下按钮 "DOWN",请向下移动通过它
我试过的:
switch (fixA.getFilterData().categoryBits | fixB.getFilterData().categoryBits) {
case Game.PLATFORM_BIT | Game.PLAYER_BIT:
if (playerBody == contactEntityA.getBody()) {
if (playerBody.getBody().getPosition().y <
contactEntityB.getBody().getPosition().y + .5 || playerController.isDownPressed()) { // .5 is half height of platform body
contact.isEnabled = false;
}
} else {
if (playerBody.getBody().getPosition().y <
contactEntityA.getBody().getPosition().y + .5 || playerController.isDownPressed()) { // .5 is half height of platform body
contact.isEnabled = false;
}
}
break;
}
我的问题是:
如果 body 几秒钟没有移动,Box2d 就不会建立联系。所以一段时间后,联系不上了,我不能往下移动。
您可以尝试这样的操作:
object DisableContact: ContactListener {
override fun beginContact(contact: Contact) {
}
override fun endContact(contact: Contact) {
}
override fun preSolve(contact: Contact, oldManifold: Manifold?) {
val playerBody = contact.fixtureA.body!! // need to identify if fixtureA or fixtureB is the player body
if (playerBody.linearVelocity.y < -3.5f) {
contact.isEnabled = false
}
}
override fun postSolve(contact: Contact, impulse: ContactImpulse?) {
}
}
试试 box 2D 中的传感器,这样它就不会与任何物体发生碰撞,并且肯定会接受事件。 当您需要物理方面时,最好使用 box2D
简单的 hack 帮助了我。我只是对每帧 body 应用很小的速度。
playerBody.applyLinearImpulse(0f, .000001f, .5f, .5f, true);
我不确定这是最好的解决方案,如果您知道如何做得更好,请写信给我。