- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 Xith3d 在 java 中启动一个 3d 游戏项目。它使用 jagatoo 进行输入,并且我已正确设置所有内容。这是我的测试代码:
import org.jagatoo.input.InputSystem;
import org.jagatoo.input.devices.components.Key;
import org.jagatoo.input.devices.components.MouseButton;
import org.jagatoo.input.events.KeyReleasedEvent;
import org.jagatoo.input.events.MouseButtonPressedEvent;
import org.jagatoo.input.events.MouseButtonReleasedEvent;
import org.openmali.vecmath2.Colorf;
import org.openmali.vecmath2.Tuple3f;
import org.openmali.vecmath2.Vector3f;
import org.xith3d.base.Xith3DEnvironment;
import org.xith3d.loop.InputAdapterRenderLoop;
import org.xith3d.picking.NearestPickListener;
import org.xith3d.picking.PickResult;
import org.xith3d.picking.PickingLibrary;
import org.xith3d.render.Canvas3D;
import org.xith3d.render.Canvas3DFactory;
import org.xith3d.render.config.OpenGLLayer;
import org.xith3d.scenegraph.Appearance;
import org.xith3d.scenegraph.BranchGroup;
import org.xith3d.scenegraph.ColoringAttributes;
import org.xith3d.scenegraph.GroupNode;
import org.xith3d.scenegraph.OrderedGroup;
import org.xith3d.scenegraph.Transform;
import org.xith3d.scenegraph.TransparencyAttributes;
import org.xith3d.render.BaseRenderPassConfig;
import org.xith3d.scenegraph.View.ProjectionPolicy;
import org.xith3d.scenegraph.primitives.Cube;
import org.xith3d.schedops.movement.RotatableGroup;
import org.xith3d.schedops.movement.TransformationDirectives;
public class Test extends InputAdapterRenderLoop implements NearestPickListener
{
// Various variables defining the cube features:
private final TransparencyAttributes transAttribs = new TransparencyAttributes(TransparencyAttributes.BLENDED, 0.5f);
private final TransformationDirectives posXRotation = new TransformationDirectives(-0.25f, 0.0f, 0.0f);
private final TransformationDirectives negXRotation = new TransformationDirectives(0.25f, 0.0f, 0.0f);
private final TransformationDirectives posYRotation = new TransformationDirectives(0.0f, -0.25f, 0.0f);
private final TransformationDirectives negYRotation = new TransformationDirectives(0.0f, 0.25f, 0.0f);
private final float expandFactor = 3.0f;
private final float contractFactor = 0.0f;
// General variables:
private Canvas3D canvas;
private BranchGroup mainBranch;
private RotatableGroup cubeRotateGroup;
private RotatableGroup cubeRotatePlane;
private OrderedGroup cubeGroup;
private Cube[][][] cubes;
private GroupNode pickGroup;
// Translation variables:
private float currentTranslationFactor = 0.0f;
// Input variables:
private int initX;
private int initY;
private int finalX;
private int finalY;
private int latestClicked = -1;
// Who's turn is it to pick a cube?
private int turnToPick;
// Who's turn is it to rotate a plane?
private int turnToRotate;
private boolean isExpanded = false;
private boolean continueExpanding = false;
public Test() throws Exception
{
// No FPS cap:
super(120f);
// Adjust the camera:
Tuple3f eyePosition = new Vector3f(11.0f, 11.0f, 11.0f);
Tuple3f viewFocus = new Vector3f(0.0f, 0.0f, 0.0f);
Tuple3f vecUp = new Vector3f(1.0f, 0.0f, 0.0f);
// Create environment:
Xith3DEnvironment env = new Xith3DEnvironment(eyePosition, viewFocus, vecUp, this);
// Create canvas:
final OpenGLLayer oglLayer = OpenGLLayer.JOGL_AWT;
this.canvas = Canvas3DFactory.createWindowed(oglLayer, 800, 800, false, "TCube");
// Add canvas to environment:
env.addCanvas(canvas);
// Create main scene branch:
mainBranch = new BranchGroup();
env.addBranchGraph(mainBranch, new BaseRenderPassConfig(ProjectionPolicy.PERSPECTIVE_PROJECTION));
// Register inputs:
InputSystem.getInstance().registerNewKeyboardAndMouse(canvas.getPeer());
this.pickGroup = env.addPerspectiveBranch(mainBranch).getBranchGroup();
cubeGroup = createCubes();
cubeRotateGroup = new RotatableGroup();
cubeRotatePlane = new RotatableGroup();
cubeRotateGroup.addChild(cubeGroup);
mainBranch.addChild(cubeRotateGroup);
mainBranch.addChild(cubeRotatePlane);
this.getAnimator().addAnimatableObject(cubeRotateGroup);
this.getAnimator().addAnimatableObject(cubeRotatePlane);
//To-do: loading screen
turnToPick = 0;
// Must pick before rotating:
turnToRotate = -1;
this.begin();
}
public OrderedGroup createCubes()
{
OrderedGroup og = new OrderedGroup();
cubes = new Cube[3][3][3];
for (int i = 0; i < 3; i++)
for (int j = 0; j < 3; j++)
for (int k = 0; k < 3; k++)
{
// Compute the coordinates for the given cube:
float x = 3.0f * (i - 1);
float y = 3.0f * (j - 1);
float z = 3.0f * (k - 1);
cubes[i][j][k] = new Cube(2.0f, initialAppearance());
cubes[i][j][k].setName("" + ((i * 9) + (j * 3) + k));
og.addChild(new Transform().setTranslation(x, y, z).add(cubes[i][j][k]));
}
return og;
}
public Appearance initialAppearance()
{
Appearance app = new Appearance();
app.setColoringAttributes(new ColoringAttributes(Colorf.LIGHT_GRAY , ColoringAttributes.SHADE_GOURAUD));
app.setTransparencyAttributes(transAttribs);
return app;
}
public Appearance changeAppearance(int i)
{
Appearance app = new Appearance();
Colorf colour = new Colorf();
colour = (i == 0) ? Colorf.ORANGE : (i == 1) ? Colorf.GREEN : null;
app.setColoringAttributes(new ColoringAttributes(colour, ColoringAttributes.SHADE_GOURAUD));
app.setTransparencyAttributes(transAttribs);
return app;
}
protected void prepareNextFrame( long gameTime, long frameTime, TimingMode tm )
{
super.prepareNextFrame( gameTime, frameTime, tm );
if (isExpanded && currentTranslationFactor < expandFactor)
continueExpanding = true;
else if (!isExpanded && currentTranslationFactor > contractFactor)
continueExpanding = true;
else
{
continueExpanding = false;
System.gc(); // possibly not needed!
}
if (continueExpanding)
{
for (int i = 0; i < 3; i++)
for (int j = 0; j < 3; j++)
for (int k = 0; k < 3; k++)
{
// Compute the coordinates for the given cube:
float x = currentTranslationFactor * (i - 1);
float y = currentTranslationFactor * (j - 1);
float z = currentTranslationFactor * (k - 1);
cubes[i][j][k].getParent().detach();
cubeRotateGroup.addChild(new Transform().setTranslation(x, y, z).add(cubes[i][j][k].getParent()));
}
currentTranslationFactor = isExpanded ? (currentTranslationFactor + 0.1f) : (currentTranslationFactor - 0.1f);
// Hack job! Removes jumping from expansion to contraction and vice-versa:
if (currentTranslationFactor >= expandFactor)
currentTranslationFactor = 3;
else if (currentTranslationFactor <= contractFactor)
currentTranslationFactor = 0;
}
}
@Override
public void onKeyReleased(KeyReleasedEvent e, Key key)
{
switch (key.getKeyID()) {
case ESCAPE:
this.end();
break;
case _0:
turnToPick = 0;
break;
case _1:
turnToPick = 1;
break;
case LEFT:
cubeRotateGroup.setTransformationDirectives(posXRotation);
break;
case RIGHT:
cubeRotateGroup.setTransformationDirectives(negXRotation);
break;
case UP:
cubeRotateGroup.setTransformationDirectives(negYRotation);
break;
case DOWN:
cubeRotateGroup.setTransformationDirectives(posYRotation);
break;
case SPACE:
if (continueExpanding)
System.out.println("Current translation not finished!");
else if (!isExpanded)
isExpanded = true;
else
isExpanded = false;
break;
}
}
@Override
public void onObjectPicked(PickResult nearest, Object userObject, long pickTime) {
latestClicked = Integer.parseInt(nearest.getNode().getName());
System.out.println("Picked cube " + latestClicked);
Colorf colour = new Colorf();
// Transparency not working!
colour = (turnToPick == 0) ? Colorf.ORANGE : (turnToPick == 1) ? Colorf.GREEN : null;
try { nearest.getGeometry().setColor(0, colour); }
catch (NullPointerException e) { System.out.println("It must be someone's turn!"); }
turnToPick = -1;
}
public void onMouseButtonPressed(MouseButtonPressedEvent e, MouseButton button) {
initX = e.getX();
initY = e.getY();
PickingLibrary.pickNearest(pickGroup, canvas, button, initX, initY, this);
}
public void onMouseButtonReleased(MouseButtonReleasedEvent e, MouseButton button)
{
if (turnToPick == -1)
{
finalX = e.getX();
finalY = e.getY();
int diffX = finalX - initX;
int diffY = finalY - initY;
if (Math.abs(diffX) > Math.abs(diffY) && latestClicked != -1)
{
System.out.println(diffX);
System.out.println(diffY);
int xPlaneToRotate = latestClicked / 9;
for (int i = 0; i < 3; i++)
for (int j = 0; j < 3; j++)
{
cubes[xPlaneToRotate][i][j].getParent().detach();
cubeRotatePlane.addChild(cubes[xPlaneToRotate][i][j].getParent());
}
TransformationDirectives xRotate = (diffX > 0) ? negXRotation : posXRotation;
cubeRotatePlane.setTransformationDirectives(xRotate);
}
else if (Math.abs(diffX) < Math.abs(diffY) && latestClicked != -1)
{
int yPlaneToRotate = -1;
// Hack job! Must be changed:
switch (latestClicked)
{
case 0:
case 1:
case 2:
case 9:
case 10:
case 11:
case 18:
case 19:
case 20:
yPlaneToRotate = 0;
break;
case 3:
case 4:
case 5:
case 12:
case 13:
case 14:
case 21:
case 22:
case 23:
yPlaneToRotate = 1;
break;
case 6:
case 7:
case 8:
case 15:
case 16:
case 17:
case 24:
case 25:
case 26:
yPlaneToRotate = 2;
break;
}
for (int i = 0; i < 3; i++)
for (int j = 0; j < 3; j++)
{
cubes[i][yPlaneToRotate][j].getParent().detach();
cubeRotatePlane.addChild(cubes[i][yPlaneToRotate][j].getParent());
}
TransformationDirectives yRotate = (diffY < 0) ? negYRotation : posYRotation;
cubeRotatePlane.setTransformationDirectives(yRotate);
}
else
{
System.out.println("Try harder!");
}
}
}
@Override
public void onPickingMissed(Object userObject, long pickTime) {
System.out.println("Pick a cube!");
}
@Override
public boolean testIntersectionsInWorldSpaceForPicking() {
// TODO Auto-generated method stub
return false;
}
public static void main(String[] args) throws Exception
{
new Test();
}
}
但是,当我运行它时,Eclipse 会以亮红色文本向我抛出此错误:
Exception in thread "main" java.lang.NoClassDefFoundError: org/jagatoo/input/listeners/InputListener
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:634)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:277)
at java.net.URLClassLoader.access$000(URLClassLoader.java:73)
at java.net.URLClassLoader$1.run(URLClassLoader.java:212)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
at java.lang.ClassLoader.loadClass(ClassLoader.java:314)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:634)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:277)
at java.net.URLClassLoader.access$000(URLClassLoader.java:73)
at java.net.URLClassLoader$1.run(URLClassLoader.java:212)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
Caused by: java.lang.ClassNotFoundException: org.jagatoo.input.listeners.InputListener
at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
... 23 more
Could not find the main class: Test. Program will exit.
我不确定这个错误从何而来,我需要帮助。任何意见,将不胜感激。我已经正确链接了库,我什至尝试添加 导入 org.jagatoo.input.listeners.InputListener;在顶部,它仍然给了我相同的输出。
[编辑]我尝试运行一个更简单的测试,只是为了确保一切正常,并使用相同的配置测试了此代码:
import org.xith3d.base.Xith3DEnvironment;
import org.xith3d.loop.RenderLoop;
import org.xith3d.render.Canvas3D;
import org.xith3d.render.Canvas3DFactory;
public class EmptyScene
{
public EmptyScene()
{
Xith3DEnvironment env = new Xith3DEnvironment();
Canvas3D canvas = Canvas3DFactory.createWindowed( 800, 600,
"My empty scene" );
env.addCanvas( canvas );
RenderLoop rl = new RenderLoop();
rl.setMaxFPS( 120f );
rl.setXith3DEnvironment( env );
// never forget to start the RenderLoop!
rl.begin();
}
public static void main( String[] args ) throws Exception
{
new EmptyScene();
}
}
现在 Eclipse 给了我这个错误:
Exception in thread "main" java.lang.NoClassDefFoundError: org/jagatoo/datatypes/Enableable
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:634)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:277)
at java.net.URLClassLoader.access$000(URLClassLoader.java:73)
at java.net.URLClassLoader$1.run(URLClassLoader.java:212)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
at EmptyScene.<init>(EmptyScene.java:11)
at EmptyScene.main(EmptyScene.java:24)
Caused by: java.lang.ClassNotFoundException: org.jagatoo.datatypes.Enableable
at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
... 12 more
我什至没有使用 Jagatoo,而 Xith 给了我错误。这里有些不对劲,我就是看不出问题所在。预先感谢任何能够解决此问题的人。
最佳答案
我猜您已将 xith3d jar 复制到 jre/lib/ext 目录中。你不应该这样做
我已经按照所述安装了项目 here并毫无异常(exception)地运行您的 EmptyScene。
[编辑]也许您正在使用 CLASSPATH var。链接 jar ?如果是这样,请查看this .
关于java - NoClassDefFoundError:org/jagatoo/input/listeners/InputListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5691261/
我正在编写一个具有以下签名的 Java 方法。 void Logger(Method method, Object[] args); 如果一个方法(例如 ABC() )调用此方法 Logger,它应该
我是 Java 新手。 我的问题是我的 Java 程序找不到我试图用作的图像文件一个 JButton。 (目前这段代码什么也没做,因为我只是得到了想要的外观第一的)。这是我的主课 代码: packag
好的,今天我在接受采访,我已经编写 Java 代码多年了。采访中说“Java 垃圾收集是一个棘手的问题,我有几个 friend 一直在努力弄清楚。你在这方面做得怎么样?”。她是想骗我吗?还是我的一生都
我的 friend 给了我一个谜语让我解开。它是这样的: There are 100 people. Each one of them, in his turn, does the following
如果我将使用 Java 5 代码的应用程序编译成字节码,生成的 .class 文件是否能够在 Java 1.4 下运行? 如果后者可以工作并且我正在尝试在我的 Java 1.4 应用程序中使用 Jav
有关于why Java doesn't support unsigned types的问题以及一些关于处理无符号类型的问题。我做了一些搜索,似乎 Scala 也不支持无符号数据类型。限制是Java和S
我只是想知道在一个 java 版本中生成的字节码是否可以在其他 java 版本上运行 最佳答案 通常,字节码无需修改即可在 较新 版本的 Java 上运行。它不会在旧版本上运行,除非您使用特殊参数 (
我有一个关于在命令提示符下执行 java 程序的基本问题。 在某些机器上我们需要指定 -cp 。 (类路径)同时执行java程序 (test为java文件名与.class文件存在于同一目录下) jav
我已经阅读 StackOverflow 有一段时间了,现在我才鼓起勇气提出问题。我今年 20 岁,目前在我的家乡(罗马尼亚克卢日-纳波卡)就读 IT 大学。足以介绍:D。 基本上,我有一家提供簿记应用
我有 public JSONObject parseXML(String xml) { JSONObject jsonObject = XML.toJSONObject(xml); r
我已经在 Java 中实现了带有动态类型的简单解释语言。不幸的是我遇到了以下问题。测试时如下代码: def main() { def ks = Map[[1, 2]].keySet()
一直提示输入 1 到 10 的数字 - 结果应将 st、rd、th 和 nd 添加到数字中。编写一个程序,提示用户输入 1 到 10 之间的任意整数,然后以序数形式显示该整数并附加后缀。 public
我有这个 DownloadFile.java 并按预期下载该文件: import java.io.*; import java.net.URL; public class DownloadFile {
我想在 GUI 上添加延迟。我放置了 2 个 for 循环,然后重新绘制了一个标签,但这 2 个 for 循环一个接一个地执行,并且标签被重新绘制到最后一个。 我能做什么? for(int i=0;
我正在对对象 Student 的列表项进行一些测试,但是我更喜欢在 java 类对象中创建硬编码列表,然后从那里提取数据,而不是连接到数据库并在结果集中选择记录。然而,自从我这样做以来已经很长时间了,
我知道对象创建分为三个部分: 声明 实例化 初始化 classA{} classB extends classA{} classA obj = new classB(1,1); 实例化 它必须使用
我有兴趣使用 GPRS 构建车辆跟踪系统。但是,我有一些问题要问以前做过此操作的人: GPRS 是最好的技术吗?人们意识到任何问题吗? 我计划使用 Java/Java EE - 有更好的技术吗? 如果
我可以通过递归方法反转数组,例如:数组={1,2,3,4,5} 数组结果={5,4,3,2,1}但我的结果是相同的数组,我不知道为什么,请帮助我。 public class Recursion { p
有这样的标准方式吗? 包括 Java源代码-测试代码- Ant 或 Maven联合单元持续集成(可能是巡航控制)ClearCase 版本控制工具部署到应用服务器 最后我希望有一个自动构建和集成环境。
我什至不知道这是否可能,我非常怀疑它是否可能,但如果可以,您能告诉我怎么做吗?我只是想知道如何从打印机打印一些文本。 有什么想法吗? 最佳答案 这里有更简单的事情。 import javax.swin
我是一名优秀的程序员,十分优秀!