0

したがって、私の問題は、スプライトが画面の左側から画面の右側に生成されているように見えることです (アプリのテストに samsung s3 を使用しています)。それらは画面の上部から降りてくるはずです。私は Libgdx を使用しており、左下から 0 が始まることを知っています。

これが私のコードで、どこから始めるべきかを設定します..

ublic class EntityManager {

private final Array<Entity> entities = new Array<Entity>();



public EntityManager(int amount){

    for(int i = 0; i< amount; i++) {
        float x = MathUtils.random (0, MainGame.WIDTH - TextureManager.ENEMY.getWidth());
        float y = MathUtils.random(MainGame.HEIGHT, MainGame.HEIGHT * 2);
        float speed = MathUtils.random(2, 5);
        addEntity(new Enemy(new Vector2 (x, y), new Vector2(0, - speed)));

これが私のMainGameクラスです...(上半分)

public class MainGame implements ApplicationListener {
  public static int WIDTH = 480, HEIGHT = 800;
   private SpriteBatch batch;

これが私のオルソカメラのセットアップです(上半分)

 public OrthoCamera() {
    this(new VirtualViewport(MainGame.WIDTH, MainGame.HEIGHT));

ここに私の完全な OrthoCamera クラスがあります

public class OrthoCamera extends OrthographicCamera {

Vector3 tmp = new Vector3();
Vector2 origin = new Vector2();
VirtualViewport virtualViewport;
Vector2 pos = new Vector2();

public OrthoCamera() {
    this(new VirtualViewport(MainGame.WIDTH, MainGame.HEIGHT));
}

public OrthoCamera(VirtualViewport virtualViewport) {
    this(virtualViewport, 0f, 0f);
}

public OrthoCamera(VirtualViewport virtualViewport, float cx, float cy) {
    this.virtualViewport = virtualViewport;
    this.origin.set(cx, cy);
}

public void setVirtualViewport(VirtualViewport virtualViewport) {
    this.virtualViewport = virtualViewport;
}

public void setPosition(float x, float y) {
    position.set(x - viewportWidth * origin.x, y - viewportHeight * origin.y, 0f);
    pos.set(x, y);
}

public Vector2 getPos() {
    return pos;
}

@Override
public void update() {
    float left = zoom * -viewportWidth / 2 + virtualViewport.getVirtualWidth() * origin.x;
    float right = zoom * viewportWidth / 2 + virtualViewport.getVirtualWidth() * origin.x;
    float top = zoom * viewportHeight / 2 + virtualViewport.getVirtualHeight() * origin.y;
    float bottom = zoom * -viewportHeight / 2 + virtualViewport.getVirtualHeight() * origin.y;

    projection.setToOrtho(left, right, bottom, top, Math.abs(near), Math.abs(far));
    view.setToLookAt(position, tmp.set(position).add(direction), up);
    combined.set(projection);
    Matrix4.mul(combined.val, view.val);
    invProjectionView.set(combined);
    Matrix4.inv(invProjectionView.val);
    frustum.update(invProjectionView);
}

/**
 * This must be called in ApplicationListener.resize() in order to correctly update the camera viewport. 
 */
public void updateViewport() {
    setToOrtho(false, virtualViewport.getWidth(), virtualViewport.getHeight());
}

public Vector2 unprojectCoordinates(float x, float y) {
    Vector3 rawtouch = new Vector3(x, y,0);
    unproject(rawtouch); 
    return new Vector2(rawtouch.x, rawtouch.y);
}

public void resize() {
    VirtualViewport virtualViewport = new VirtualViewport(MainGame.WIDTH, MainGame.HEIGHT);  
    setVirtualViewport(virtualViewport);  
    updateViewport();
  }
 }

そして、私の完全な VirtualViewport クラス

import com.badlogic.gdx.Gdx;

public class VirtualViewport {  

float virtualWidth;  
float virtualHeight;  

public float getVirtualWidth() {  
    return virtualWidth;  
}  

public float getVirtualHeight() {  
    return virtualHeight;  
}  

public VirtualViewport(float virtualWidth, float virtualHeight) {  
    this(virtualWidth, virtualHeight, false);  
}  

public VirtualViewport(float virtualWidth, float virtualHeight, boolean shrink) {  
    this.virtualWidth = virtualWidth;  
    this.virtualHeight = virtualHeight;  
}  

public float getWidth() {  
    return getWidth(Gdx.graphics.getWidth(), Gdx.graphics.getHeight());  
}  

public float getHeight() {  
    return getHeight(Gdx.graphics.getWidth(), Gdx.graphics.getHeight());  
}  

/** 
 * Returns the view port width to let all the virtual view port to be shown on the screen. 
 *  
 * @param screenWidth 
 *            The screen width. 
 * @param screenHeight 
 *            The screen Height. 
 */  
public float getWidth(float screenWidth, float screenHeight) {  
    float virtualAspect = virtualWidth / virtualHeight;  
    float aspect = screenWidth / screenHeight;  
    if (aspect > virtualAspect || (Math.abs(aspect - virtualAspect) < 0.01f)) {  
        return virtualHeight * aspect;  
    } else {  
        return virtualWidth;  
    }  
}  

/** 
 * Returns the view port height to let all the virtual view port to be shown on the screen. 
 *  
 * @param screenWidth 
 *            The screen width. 
 * @param screenHeight 
 *            The screen Height. 
 */  
public float getHeight(float screenWidth, float screenHeight) {  
    float virtualAspect = virtualWidth / virtualHeight;  
    float aspect = screenWidth / screenHeight;  
    if (aspect > virtualAspect || (Math.abs(aspect - virtualAspect) < 0.01f)) {  
        return virtualHeight;  
    } else {  
        return virtualWidth / aspect;  
    }  
}  

}  

これは私の敵クラスです (落下するはずのオブジェクト)

public class Enemy extends Entity {

public Enemy(Vector2 pos, Vector2 direction) {
    super(TextureManager.ENEMY, pos, direction);

}

@Override
public void update() {
    pos.add(direction);

    if (pos.y <= - TextureManager.ENEMY.getHeight()){
        float x = MathUtils.random(0, MainGame.WIDTH - TextureManager. ENEMY.getWidth());
        pos.set(x, MainGame.HEIGHT);
    }

}



}
4

0 に答える 0