gpt4 book ai didi

java - 如何通过碰撞检测获取对象参数?

转载 作者:行者123 更新时间:2023-11-29 08:55:59 25 4
gpt4 key购买 nike

我开始使用 jMonkey 开发游戏。我刚刚从我自己制作的“实体”类中创建了一个对象,它包含一个 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());

显示我刚刚拍摄的“几何”的名称。但现在的问题是,我的对象不是几何体!而且我不知道如何实现我得到这个对象的名称。对我来说最好的方法是 results.getCollision(0) 返回我的对象​​,这样我就可以说“object.getName();”

有人知道我该怎么做吗?如果有任何想法,我将不胜感激 :)干杯- 丹尼尔

最佳答案

你可以在 Java 7 中使用这样的东西:

switch (results.getCollision(0).getClass().getName()){
case "ObjectName1":
Code
break;
case "ObjectName2":
Code
break;
}

或者在 Java 6 中

String objectName=results.getCollision(0).getClass().getName()){
if ("ObjectName1"==objectName){
Code
}elseif ("ObjectName2"==objectName){
Code
}

关于java - 如何通过碰撞检测获取对象参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20266601/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com