2016-08-02 34 views
0
public class gameMain implements Screen { 
    final main game; 



    SpriteBatch batch; 
    Texture img; 
    private Texture alexTexture; 
    private Rectangle alex; 

    private Texture cTex; 
    private Texture dropper; 
    private Texture ender; 
    private Texture partsImg; 
    private Texture toy; 

    private OrthographicCamera camera; 
    private Array<Rectangle> part;  // ****** 
    private long lastDropTime; 
    private int beltSpeed = 100;   // ****** 

    //Score Keeper 
    private int score; 
    private String scoreName; 



    //basically a create method 
    public gameMain(final main gam){ 
     this.game = gam; 

     // load images into memory 
     dropper = new Texture("android/assets/dropper.png"); 
     ender = new Texture("android/assets/endOfBelt.png"); 
     partsImg = new Texture("android/assets/unmadeToyParts.png"); 
     toy = new Texture("android/assets/toymade.png"); 
     cTex = new Texture("android/assets/conveyerBeltBackground.png"); 
     alexTexture = new Texture(Gdx.files.internal("android/assets/alexAlpha2.png")); 

     // set the game window resolution 
     camera = new OrthographicCamera(); 
     camera.setToOrtho(false, 1080,720); 

     // Alex's position/hitbox 
     alex = new Rectangle(); 
     alex.x = 250; 
     alex.y = 150; 
     alex.width = 126; 
     alex.height = 75; 

     // part stuff 
     part = new Array<Rectangle>(); 
     spawnPart(); 

     // score handler 
     score = 0; 
     scoreName = "Toys Made: "; 
    } 

    private void spawnPart(){    // ******* 
     Rectangle parts = new Rectangle(); 
     parts.x = 0; 
     parts.y = 210; 
     parts.width = 52; 
     parts.height = 60; 
     part.add(parts); 
     lastDropTime = TimeUtils.nanoTime(); 
    }           //******** 

    @Override 
    public void render(float delta) { 
     Gdx.gl.glClearColor(0, 0, 0, 1); 
     Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 
     camera.update(); 

     // load alex sprite 
     game.batch.setProjectionMatrix(camera.combined); 
     // begin drawing to screen 
     game.batch.begin(); 
     batch.draw(cTex, -5, 200); // draw conveyer background 
     batch.draw(dropper, 0, 210); // draw the dropper 
     batch.draw(ender, 600, 200); // draw the ender 
     game.batch.draw(alexTexture, alex.x, alex.y); // draw alex 
     for(Rectangle parts: part){ 
      game.batch.draw(partsImg, parts.x, parts.y); // draw part 
     } 
     game.font.draw(game.batch, scoreName, 25, 100); // draw scoreboard 
     game.batch.end(); // end drawing to screen 

     //****************************************************************************** 
//HERE IS WHERE I AM TRYING TO PUT IT 

part.x += beltspeed; 
if (part.rectangle overlaps ender.rectangle){ 
despawn part; 
} 

//****************************************************************************** 



    } 

    @Override 
    public void show() { 

    } 

    @Override 
    public void hide() { 

    } 

    @Override 
    public void pause() { 

    } 

    @Override 
    public void resume() { 

    } 

    @Override 
    public void resize(int width, int height) { 

    } 

    @Override 
    public void dispose() { 

    } 
} 

你好,我是很新的LibGDX,並做了一些研究之後,我決定做一個遊戲,你是一個工廠的工人名叫Alex和你建立的玩具。我會很樂意接受任何反饋,以使我的代碼更加準確或者更好地工作。我用一些星號標出了我認爲與我的問題相關的所有內容。LibGDX上做出矩形移動自己的

但我的問題是:你如何使一個'矩形',如我的'部分'自己動起來。我添加了一個皮帶和一個產卵區域,一旦它的hitbox超過了'ender'hitbox,我想去掉它。

此外,我還沒有得到這一點,但當'部分'的hitbox經過'亞歷克斯'hitbox我想要一個小迷你,出現在你必須按下,向下,左,右(隨機)來建造玩具。如果您對如何處理這個問題有任何建議,我會非常感激。

"C:\Program Files\Java\jdk1.7.0_79\jre\bin\java" -Didea.launcher.port=7532 "-Didea.launcher.bin.path=C:\Program Files (x86)\JetBrains\IntelliJ IDEA Community Edition 2016.1.1\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.7.0_79\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\jce.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\jfxrt.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\resources.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\rt.jar;C:\Users\RAFiredog\Desktop\Intellij\AlexTheTemp\out\production\desktop;C:\Users\RAFiredog\Desktop\Intellij\AlexTheTemp\out\production\core;C:\Users\RAFiredog\.gradle\caches\modules-2\files-2.1\com.badlogicgames.gdx\gdx\1.9.2\e641cb91bec06bc64d9ddf7a7d7062caceec73cd\gdx-1.9.2.jar;C:\Users\RAFiredog\.gradle\caches\modules-2\files-2.1\com.badlogicgames.gdx\gdx-box2d\1.9.2\b78eaa90aaaf7830e6dffff587ea6e859c2787b2\gdx-box2d-1.9.2.jar;C:\Users\RAFiredog\.gradle\caches\modules-2\files-2.1\com.badlogicgames.gdx\gdx-freetype\1.9.2\3609253d14edb1b3ca5aacff4e06989edde75be4\gdx-freetype-1.9.2.jar;C:\Users\RAFiredog\.gradle\caches\modules-2\files-2.1\com.badlogicgames.gdx\gdx-backend-lwjgl\1.9.2\d710a8704ed584ec2ba9ca52e3a6a5885dd759cc\gdx-backend-lwjgl-1.9.2.jar;C:\Users\RAFiredog\.gradle\caches\modules-2\files-2.1\com.badlogicgames.gdx\gdx-platform\1.9.2\dde4cf7e9ce61c24042f512203aed87657496639\gdx-platform-1.9.2-natives-desktop.jar;C:\Users\RAFiredog\.gradle\caches\modules-2\files-2.1\com.badlogicgames.gdx\gdx-box2d-platform\1.9.2\497cbfbf81e7e8b1e8433b19291c5af4bbc2ec66\gdx-box2d-platform-1.9.2-natives-desktop.jar;C:\Users\RAFiredog\.gradle\caches\modules-2\files-2.1\com.badlogicgames.gdx\gdx-tools\1.9.2\37d8e3009ae0febdf93717b21980c67c8cadac07\gdx-tools-1.9.2.jar;C:\Users\RAFiredog\.gradle\caches\modules-2\files-2.1\com.badlogicgames.gdx\gdx-freetype-platform\1.9.2\1e1afb0b6c9e8aeb7d495cb8f55c353d3da58cf0\gdx-freetype-platform-1.9.2-natives-desktop.jar;C:\Users\RAFiredog\.gradle\caches\modules-2\files-2.1\org.lwjgl.lwjgl\lwjgl\2.9.2\a9d80fe5935c7a9149f6584d9777cfd471f65489\lwjgl-2.9.2.jar;C:\Users\RAFiredog\.gradle\caches\modules-2\files-2.1\org.lwjgl.lwjgl\lwjgl_util\2.9.2\4b9e37300a87799856e0bd15ed81663cdb6b0947\lwjgl_util-2.9.2.jar;C:\Users\RAFiredog\.gradle\caches\modules-2\files-2.1\com.badlogicgames.jlayer\jlayer\1.0.1-gdx\7cca83cec5c1b2f011362f4d85aabd71a73b049d\jlayer-1.0.1-gdx.jar;C:\Users\RAFiredog\.gradle\caches\modules-2\files-2.1\org.jcraft\jorbis\0.0.17\8872d22b293e8f5d7d56ff92be966e6dc28ebdc6\jorbis-0.0.17.jar;C:\Users\RAFiredog\.gradle\caches\modules-2\files-2.1\com.badlogicgames.gdx\gdx-backend-headless\1.9.2\813e6020de85cd831f02cb5e9060fd7ea8cb208e\gdx-backend-headless-1.9.2.jar;C:\Users\RAFiredog\.gradle\caches\modules-2\files-2.1\org.lwjgl.lwjgl\lwjgl-platform\2.9.2\510c7d317f5e9e700b9cfaac5fd38bdebf0702e0\lwjgl-platform-2.9.2-natives-windows.jar;C:\Users\RAFiredog\.gradle\caches\modules-2\files-2.1\org.lwjgl.lwjgl\lwjgl-platform\2.9.2\d276cdf61fe2b516c7b7f4aa1b8dea91dbdc8d56\lwjgl-platform-2.9.2-natives-linux.jar;C:\Users\RAFiredog\.gradle\caches\modules-2\files-2.1\org.lwjgl.lwjgl\lwjgl-platform\2.9.2\d55b46b40b40249d627a83a7f7f22649709d70c3\lwjgl-platform-2.9.2-natives-osx.jar;C:\Users\RAFiredog\.gradle\caches\modules-2\files-2.1\net.java.jinput\jinput\2.0.5\39c7796b469a600f72380316f6b1f11db6c2c7c4\jinput-2.0.5.jar;C:\Users\RAFiredog\.gradle\caches\modules-2\files-2.1\net.java.jutils\jutils\1.0.0\e12fe1fda814bd348c1579329c86943d2cd3c6a6\jutils-1.0.0.jar;C:\Users\RAFiredog\.gradle\caches\modules-2\files-2.1\net.java.jinput\jinput-platform\2.0.5\7ff832a6eb9ab6a767f1ade2b548092d0fa64795\jinput-platform-2.0.5-natives-linux.jar;C:\Users\RAFiredog\.gradle\caches\modules-2\files-2.1\net.java.jinput\jinput-platform\2.0.5\385ee093e01f587f30ee1c8a2ee7d408fd732e16\jinput-platform-2.0.5-natives-windows.jar;C:\Users\RAFiredog\.gradle\caches\modules-2\files-2.1\net.java.jinput\jinput-platform\2.0.5\53f9c919f34d2ca9de8c51fc4e1e8282029a9232\jinput-platform-2.0.5-natives-osx.jar;C:\Program Files (x86)\JetBrains\IntelliJ IDEA Community Edition 2016.1.1\lib\idea_rt.jar" com.intellij.rt.execution.application.AppMain com.rafiredog.game.desktop.DesktopLauncher 
Exception in thread "LWJGL Application" java.lang.NullPointerException 
    at com.rafiredog.game.gameMain.render(gameMain.java:97) 
    at com.badlogic.gdx.Game.render(Game.java:46) 
    at com.rafiredog.game.main.render(main.java:45) 
    at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:223) 
    at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:124) 

Process finished with exit code 0 

最後,我現在得到這個錯誤。我在「batch.draw」附近移動了一些代碼。但是,這可能不是錯誤的原因?我現在有點迷路了。但是,一旦錯誤得到解決,我會很高興地截取我現在的遊戲。

謝謝你有任何關於修復這個遊戲的見解。

回答

2

你需要做遊戲更新,然後渲染遊戲循環的每個循環。你的代碼的遊戲更新部分可以遍歷你的對象來爲它們做些事情。

例如,您的渲染方法看起來像這樣。您需要爲for循環顯式使用Iterator,因爲否則無法在迭代時從列表中刪除項目。

@Override 
public void render(float delta) { 

    //Update game 
    Iterator<Rectangle> iterator = parts.iterator(); 
    while (iterator.hasNext()){ 
     Rectangle part = iterator.next(); 
     part.x += beltSpeed * delta; //distance = speed * time 
     if (part.rectangle.overlaps(ender.rectangle)){ 
      iterator.remove(); //removes rectangle from the list 
     } 
    } 
    //This is also where you would update movement for anything else, 
    //such as a character jumping, or counting down a timer and spawning 
    //something when it reaches zero, for example. 

    //Draw everything 
    Gdx.gl.glClearColor(0, 0, 0, 1); 
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 
    camera.update(); 
    game.batch.setProjectionMatrix(camera.combined); 
    game.batch.begin(); 
    //... 
    game.batch.end(); 
} 

如果您產卵和「despawn」大量的對象,你可能需要用池,以避免內存釋放口吃。您可以通過將new Rectangle()替換爲Pools.obtain(Rectangle.class)並在iterator.remove()之後添加行Pools.free(part)來完成此操作。

我也注意到,通過交換複數和單數,你有反對直覺的用法,即「部分」和「部分」。確保不會讓你感到沮喪。

至於你的NullPointerException,read here

+0

好的,謝謝你的幫助!當我在等待時,我想出瞭如何使用迭代器,並試圖找出LibGDX如何使用遊戲循環...有什麼你會推薦新手閱讀?由於我不知道代碼應該放在哪裏,所以我覺得自己很混亂。 – RAFiredog