Я делаю игру в jMonkeyEngine, где 2 персонажа сражаются вместе. Я хочу, чтобы эта программа собирала информацию о столкновениях с простыми частями тела. Например, если я даю удар для персонажа, программа имеет знания о части тела. Я знаю, что jMonkey может дать мне информацию о скелете, но столкновения между геометриями. Моя идея - создать группу объектов в качестве символа и получить геометрию в jME. Это хорошая идея? Я создаю объекты в Blender.jMonkeyEngine - как получить часть тела, которая столкнулась
1
A
ответ
0
Вы можете попробовать приблизительные фигуры с более простой геометрией и использовать ее для столкновений. Для персонажа он работает для меня, используя цилиндр и вспомогательный класс BetterCharacterControl
.
private BetterCharacterControl characterControl;
@Override
public void simpleUpdate(float tpf) {
characterControl.setGravity(planetAppState.getGravity());
// Get current forward and left vectors of model by using its rotation
// to rotate the unit vectors
Vector3f modelForwardDir = characterNode.getWorldRotation().mult(Vector3f.UNIT_Z);
Vector3f modelLeftDir = characterNode.getWorldRotation().mult(Vector3f.UNIT_X);
// WalkDirection is global!
// You *can* make your character fly with this.
walkDirection.set(0, 0, 0);
if (leftStrafe) {
walkDirection.addLocal(modelLeftDir.mult(5));
} else if (rightStrafe) {
walkDirection.addLocal(modelLeftDir.negate().multLocal(5));
}
if (forward) {
walkDirection.addLocal(modelForwardDir.mult(5));
} else if (backward) {
walkDirection.addLocal(modelForwardDir.negate().multLocal(5));
}
characterControl.setWalkDirection(walkDirection);
// ViewDirection is local to characters physics system!
// The final world rotation depends on the gravity and on the state of
// setApplyPhysicsLocal()
if (leftRotate) {
Quaternion rotateL = new Quaternion().fromAngleAxis(FastMath.PI * tpf, Vector3f.UNIT_Y);
rotateL.multLocal(viewDirection);
} else if (rightRotate) {
Quaternion rotateR = new Quaternion().fromAngleAxis(-FastMath.PI * tpf, Vector3f.UNIT_Y);
rotateR.multLocal(viewDirection);
}
characterControl.setViewDirection(viewDirection);
if (walkDirection.length() == 0) {
if (!"Idle".equals(animationChannel.getAnimationName())) {
animationChannel.setAnim("Idle", 1f);
}
} else {
if (!"Walk".equals(animationChannel.getAnimationName())) {
animationChannel.setAnim("Walk", 0.7f);
}
}
}
Вы можете использовать collisionshape
private CylinderCollisionShape shape;
и использовать вспомогательные классы jme3, чтобы получить данные столкновения
CollisionResults results = new CollisionResults();
// System.out.println("1 #Collisions between" + ufoNode.getName()
// + " and " + jumpgateSpatial.getName() + ": " + results.size());
ufoNode.collideWith((BoundingBox) jumpgateSpatial.getWorldBound(),
results);
// System.out.println("2 #Collisions between" + ufoNode.getName()
// + " and " + jumpgateSpatial.getName() + ": " + results.size());
CollisionResults results2 = new CollisionResults();
// Use the results
if (results.size() > 0 && playtime > 50000) {
System.out.println("playtime" + playtime);
System.out.println("#Collisions between" + ufoNode.getName()
+ " and " + jumpgateSpatial.getName() + ": "
+ results.size());
// how to react when a collision was detected
CollisionResult closest = results.getClosestCollision();
System.out.println("What was hit? "
+ closest.getGeometry().getName());
System.out
.println("Where was it hit? " + closest.getContactPoint());
System.out.println("Distance? " + closest.getDistance());
ufoControl
.setPhysicsLocation(jumpGateControl2.getPhysicsLocation());
System.out.println("Warped");
} else {
// how to react when no collision occured
}
if (results2.size() > 0) {
System.out.println("Number of Collisions between"
+ ufoNode.getName() + " and " + moon.getName() + ": "
+ results2.size());
// how to react when a collision was detected
CollisionResult closest2 = results2.getClosestCollision();
System.out.println("What was hit? "
+ closest2.getGeometry().getName());
System.out.println("Where was it hit? "
+ closest2.getContactPoint());
System.out.println("Distance? " + closest2.getDistance());
}
Смежные вопросы
- 1. Как получить часть тела html в php
- 2. Magento Ajax - Как получить только часть тела?
- 3. Как остановить игру jMonkeyEngine?
- 4. Нижняя часть перекрывающегося тела
- 5. Как получить часть тела из почты с помощью MIME :: Parser?
- 6. JAVA - JMonkeyEngine - Получение информации сцены
- 7. Как удалить часть истории тела электронной почты?
- 8. Пересечение JMonkeyEngine-Geometry NullPointerException
- 9. JMonkeyEngine не загружает модели
- 10. jMonkeyEngine: BetterCharacterControl всегда подпрыгивает
- 11. JMonkeyEngine с JDK 8
- 12. jMonkeyEngine camera follow
- 13. jMonkeyEngine: lwjgl.dll (Доступ запрещен)
- 14. Свинг в JmonkeyEngine (JME)
- 15. JMonkeyEngine in Intellij IDEA
- 16. JMonkeyEngine Полноэкранного Script
- 17. Импорт .3DS модели в JMonkeyEngine 3
- 18. Как получить номер исключения, с которым служба столкнулась в WCF?
- 19. Как получить часть номера, которая находится в скобках в Java?
- 20. как получить часть bitmapdata, которая находится в определенном цвете
- 21. Синтаксического строку HTML тела ответа извлечь часть
- 22. Spring boot Загрузка многостраничного файла как часть тела json
- 23. Командная очередность за галочку или часть тела
- 24. Сделать html footer занимают остальную часть тела
- 25. JMonkeyEngine render. Врезка не оказывают
- 26. jMonkeyEngine - автоматически отмечать другие переключатели
- 27. Как получить буфер тела запроса?
- 28. Как получить высоту элемента тела
- 29. Как получить атрибут класса тела?
- 30. Как получить JBox2d Размер тела