Я начал работать над игрой с jMonkey. Я только что создал объект из класса «Entity», который я создал сам, который содержит 3D-модель, физику и так далее. Вот код:Как получить параметр объектов с обнаружением столкновения?
package mygame.entities;
import com.jme3.asset.AssetManager;
import com.jme3.bullet.BulletAppState;
import com.jme3.bullet.control.RigidBodyControl;
import com.jme3.renderer.queue.RenderQueue.ShadowMode;
import com.jme3.scene.Geometry;
import com.jme3.scene.Node;
import com.jme3.scene.Spatial;
public class Entity {
private AssetManager assetManager;
private Node rootNode;
public Spatial model;
private Geometry object;
private String itsName;
private int life;
private boolean destroyAble;
private boolean destroyed;
public Entity(BulletAppState bas, AssetManager manager, Node rootNode, String name, int lifes, boolean destroyable, float x, float y, float z) {
itsName = name;
life = lifes;
destroyAble = destroyable;
model = manager.loadModel("Models/woodlog.j3o");
model.setLocalTranslation(x, y, z);
model.setShadowMode(ShadowMode.Cast);
model.setName(name);
model.setUserData("lifes", 3);
RigidBodyControl body = new RigidBodyControl(2);
model.addControl(body);
bas.getPhysicsSpace().add(body);
rootNode.attachChild(model);
}
public String getName() {
return itsName;
}
public int getLife() {
return life;
}
public void setLife(int lifes) {
life = lifes;
}
public boolean isDestroyable() {
return destroyAble;
}
public boolean isDestroyed() {
if (destroyAble && life <= 0) {
destroyed = true;
} else {
destroyed = false;
}
return destroyed;
}
}
С помощью обучающей программы на сайте jMonkey мне удалось осуществить «стрельбу». Простой луч, следующий за моим направлением кулачка. Вот код того, что произойдет, если он столкнутся с чем-то:
} else if (binding.equals("Fire") && !isPressed) {
// 1. Reset results list.
CollisionResults results = new CollisionResults();
// 2. Aim the ray from cam loc to cam direction.
Ray ray = new Ray(cam.getLocation(), cam.getDirection());
// 3. Collect intersections between Ray and Shootables in results list.
shootables.collideWith(ray, results);
// 4. Print results.
System.out.println(results.size());
if (results.size() >= 1) {
System.out.println(results.getCollision(0).getGeometry().getName());
//Material material = results.getCollision(0).getGeometry().getMaterial();
//material.setColor("Color", ColorRGBA.randomColor());
}
}
Так что все работает отлично! Эта строка:
System.out.println(results.getCollision(0).getGeometry().getName());
отображает название этой «геометрии», которую я только что снял. Но проблема в том, что мой объект не является геометрией! И я не знаю, как я могу реализовать, что я получаю имя этого объекта в любом случае. Лучшим способом для меня было бы, если result.getCollision (0) вернет мой объект, чтобы я мог просто сказать «object.getName();»
Кто-нибудь знает, как я могу это сделать? Буду очень благодарен за любые идеи :) ура - Даниэль
вы должны рассмотреть чтобы изменить ваш титул, который абсолютно не ясен. – Kiwy
После того, как вы застрелили объект, вы должны найти его имя, нанесенное татуировкой на ухо. :-) –
@ Киви - Совершенно ясно, о чем он говорит. :-) :-) –