Well due to the precahcer ect. I now ran into quite an intresting prbolem, wich I can't find a solution for,
normally as seen in various examples, the start() method should return when the game is started (jme tests, stardust), but for some reason mine does not O.o
Here is the relevant problematic part:
starter thread
Runnable starter = new Runnable(){
@Override
public void run() {
final MassiveSpaceEngine game = new MassiveSpaceEngine(settings);
System.out.print("1");
game.start();
System.out.print("2");
//game.setLogicTicksPerSecond(50);
//game.InitLoading();
}
};
new Thread(starter).start();
MassiveSpaceEngine.java
package Engine;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.util.logging.Level;
import org.lwjgl.opengl.GL13;
import GameStates.LoadingAnimatedState;
import Interface.Settings;
import com.jme.app.FixedLogicrateGame;
import com.jme.app.AbstractGame.ConfigShowMode;
import com.jme.input.FirstPersonHandler;
import com.jme.input.KeyBindingManager;
import com.jme.input.KeyInput;
import com.jme.math.Vector3f;
import com.jme.renderer.Camera;
import com.jme.renderer.ColorRGBA;
import com.jme.renderer.Renderer;
import com.jme.scene.Node;
import com.jme.system.DisplaySystem;
import com.jme.system.GameSettings;
import com.jme.system.JmeException;
import com.jme.system.PropertiesGameSettings;
import com.jme.util.GameTaskQueue;
import com.jme.util.GameTaskQueueManager;
import com.jme.util.Timer;
import com.jme.util.resource.ResourceLocatorTool;
import com.jmex.game.state.GameStateManager;
import com.jmex.game.state.load.TransitionGameState;
import com.jmex.physics.PhysicsSpace;
public class MassiveSpaceEngine extends FixedLogicrateGame {
PhysicsSpace physspace;
private Settings mysettings;
private Camera cam;
private Timer timer;
public MassiveSpaceEngine(Settings settings) {
//physspace = PhysicsSpace.create();
this.mysettings = settings;
this.setConfigShowMode(ConfigShowMode.NeverShow);
}
@Override
protected void cleanup() {
// TODO Auto-generated method stub
}
@Override
protected void initGame() {
GameStateManager.create();
}
public void InitLoading() {
System.out.print("start loading");
display.setTitle("New Horizons (Loading)");
LoadingAnimatedState loadingstate = new LoadingAnimatedState(display);
GameStateManager.getInstance().attachChild(loadingstate);
loadingstate.setName("LoadingState");
loadingstate.setActive(true);
loadingstate.StartLoading();
System.out.print("end loading");
}
@Override
protected void initSystem() {
System.out.print("initsystem");
BasicInit();
System.out.print("end init system");
}
private void BasicInit() {
settings.setHeight(mysettings.getResolutiony());
settings.setWidth(mysettings.getResolutionx());
display = DisplaySystem.getDisplaySystem("LWJGL");
display.setMinDepthBits(24);
display.setMinStencilBits(2);
display.setMinAlphaBits(8);
display.setMinSamples(2);
display.createWindow(settings.getWidth(),settings.getHeight(), 32, 120,mysettings.isFullscreen());
PositionWindow();//needs the fields display and mysettings!!
cam = display.getRenderer().createCamera(display.getWidth(),display.getHeight());
display.getRenderer().setBackgroundColor(ColorRGBA.black.clone());
cameraPerspective();
Vector3f loc = new Vector3f(0.0f, 0.0f, 25.0f);
Vector3f left = new Vector3f(-1.0f, 0.0f, 0.0f);
Vector3f up = new Vector3f(0.0f, 1.0f, 0.0f);
Vector3f dir = new Vector3f(0.0f, 0f, -1.0f);
cam.setFrame(loc, left, up, dir);
cam.update();
display.getRenderer().setCamera(cam);
display.setTitle("New Horizons Client");
}
private void PositionWindow() {
Toolkit toolkit = Toolkit.getDefaultToolkit();
Dimension scrnsize = toolkit.getScreenSize();
int x = mysettings.getWindowlocationx();
int y = mysettings.getWindowlocationy();
if(scrnsize.width-display.getWidth() < x){
x = scrnsize.width-display.getWidth();
}
if(scrnsize.height-display.getHeight() < y){
y = scrnsize.height-display.getHeight();
}
display.moveWindowTo(x,y);
}
protected void cameraPerspective() {
cam.setFrustumPerspective(45.0f, (float) display.getWidth()
/ (float) display.getHeight(), 1, 1000);
cam.setParallelProjection(false);
cam.update();
}
protected void cameraParallel() {
cam.setParallelProjection(true);
float aspect = (float) display.getWidth() / display.getHeight();
cam.setFrustum(-100, 1000, -50 * aspect, 50 * aspect, -50, 50);
cam.update();
}
@Override
protected void reinit() {
// TODO Auto-generated method stub
}
@Override
protected void render(float percentWithinTick) {
DisplaySystem.getDisplaySystem().getRenderer().clearBuffers();// Execute renderQueue item
GameTaskQueueManager.getManager().getQueue(GameTaskQueue.RENDER).execute();
// Render the GameStates
GameStateManager.getInstance().render(percentWithinTick);
}
@Override
protected void update(float interpolation) {
GameTaskQueueManager.getManager().getQueue(GameTaskQueue.UPDATE).execute();
GameStateManager.getInstance().update(interpolation);
}
@Override
protected GameSettings getNewSettings() {
return new PropertiesGameSettings(".");
}
}
This code returns me
106.03.2009 17:07:59 com.jme.app.FixedLogicrateGame start
INFO: Application started.
06.03.2009 17:07:59 com.jme.system.PropertiesGameSettings <init>
INFO: PropertiesGameSettings created
initsystem06.03.2009 17:07:59 com.jme.input.joystick.DummyJoystickInput <init>
INFO: Joystick support is disabled
06.03.2009 17:07:59 com.jme.system.lwjgl.LWJGLDisplaySystem <init>
INFO: LWJGL Display System created.
06.03.2009 17:08:01 com.jme.renderer.lwjgl.LWJGLRenderer <init>
INFO: LWJGLRenderer created. W: 800H: 600 Version: 2.0.1
06.03.2009 17:08:01 com.jme.renderer.AbstractCamera <init>
INFO: Camera created.
06.03.2009 17:08:01 com.jme.util.lwjgl.LWJGLTimer <init>
INFO: Timer resolution: 1000 ticks per second
06.03.2009 17:08:01 com.jmex.game.state.GameStateManager create
INFO: Created GameStateManager
end init system
As you can see with the Sys.out messages, enither the InitGame nor the InitSystem nor the Constructer seemms to be the reason (I tried adding super(); to the Constructer, it changed nothing)
Does anyone knows why I have this behaviour?
Basically it probably won't be much a problem to work around that, since the game itself seems to work (If i add something in the initgame, it gets executed)
However it seems like I have some huge error in my code, and I don't really like the idea to keep it.