2016-08-10 18 views
0

嗨我目前正在編寫一個遊戲,你必須避免使用飛船的小行星。飛船是一個精靈。不知何故雪碧不動?!在這裏你可以看到我的代碼的很大一部分,以瞭解我正在嘗試做什麼。爲什麼我的Sprite不移動? LIbgdx/Android

主類:

package com.me.mygdxgame; 

import screen.MenuScreen; 
import screen.ScreenManager; 


public class MyGdxGame implements ApplicationListener { 


SpriteBatch batch; 
public static int WIDTH = 800 , HEIGHT = 480; // resolution 

@Override 
public void create() { 
batch = new SpriteBatch(); 
ScreenManager.setScreen(new MenuScreen()); 

} 

@Override 
public void dispose() { 

if(ScreenManager.getCurrentScreen() != null){ 
ScreenManager.getCurrentScreen().dispose(); 
} 
} 

@Override 
public void render() { 

Gdx.gl.glClearColor(1, 1, 1, 1); 
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 

if(ScreenManager.getCurrentScreen() != null){ 
    ScreenManager.getCurrentScreen().update(); 
} 

if(ScreenManager.getCurrentScreen() != null){ 
    ScreenManager.getCurrentScreen().render(batch); 
} 
} 

屏幕管理

package screen; 

public class ScreenManager { 

private static Screen currentScreen; 

public static void setScreen(Screen screen){ 
    if(currentScreen != null){ 
     currentScreen.dispose(); 
    } 
     currentScreen = screen; 
     currentScreen.create(); 
    } 


public static Screen getCurrentScreen() { 
    return currentScreen; 
} 

} 

MenuScreen:

public class MenuScreen extends Screen { 

private OrthoCamera cam; 
private Spaceship spaceship; 

@Override 
public void create() { 
    // TODO Auto-generated method stub 
    cam = new OrthoCamera(); 
    spaceship = new Spaceship(); 
} 

@Override 
public void render(SpriteBatch batch) { 
    // TODO Auto-generated method stub 
    batch.setProjectionMatrix(cam.combined); 
    batch.begin(); 
    spaceship.render(batch); 
    batch.end(); 
} 

@Override 
public void update() { 
    // TODO Auto-generated method stub 
    cam.update(); 
    spaceship.update(); 
} 

實體類:

public abstract class Entity { 

protected float x = 0,y = 0; 
protected Vector2 pos, direction; 
protected Texture texture; 

/*public Entity(Vector2 pos, Vector2 direction){ 
    this.pos = pos; 
    this.direction = direction; 
} */ 

public abstract void update(); 

public abstract void render(SpriteBatch batch); 



public Vector2 getPostion() { 
    return pos; 
} 

宇宙飛船類別:

public class Spaceship extends Entity { 

Texture texture; 
Sprite sprite; 
float width, height; 
float x = 0f, y = 0f; 

public Spaceship() { 

    width = Gdx.graphics.getWidth(); 
    height = Gdx.graphics.getHeight(); 
    texture = new Texture("spritesheet.png"); 

    texture.setFilter(TextureFilter.Linear, TextureFilter.Linear); 
    TextureRegion region = new TextureRegion(texture, 0, 312, 258, 144); 

    sprite = new Sprite(region); 
    sprite.setSize(sprite.getWidth(), sprite.getHeight()); 
    sprite.setOrigin(sprite.getWidth()/2, sprite.getHeight()/2); 
    sprite.setPosition(MyGdxGame.WIDTH/2, MyGdxGame.HEIGHT/2); 

} 

public void update() { 

    if (Gdx.input.isTouched()) { 

     x = Gdx.input.getX() - width/2; 
     y = -Gdx.input.getY() + height/2; 
    } 
} 


@Override 
public void render(SpriteBatch batch) { 
    // TODO Auto-generated method stub 
    sprite.draw(batch); 
} 
+0

您從未更新過Sprite對象的位置,只有一些任意的x和y變量不用於任何事情。 – Tenfour04

+0

@ Tenfour04非常感謝! –

回答

0

在這部分代碼,則僅將數據傳遞至x &變量y和不精靈位置。

x = Gdx.input.getX() - width/2; 
y = -Gdx.input.getY() + height/2; 

您必須將其應用於當前精靈。

sprite.setPosition(x, y); // or sprite.setCenter(x, y) if you want it to be centered position. 
相關問題