Android 我的精灵似乎是从屏幕的左侧到右侧繁殖的?

Android 我的精灵似乎是从屏幕的左侧到右侧繁殖的?,android,eclipse,libgdx,orthographic,Android,Eclipse,Libgdx,Orthographic,所以,我的问题是,我的精灵似乎是从屏幕的左侧到右侧生成的(我正在使用三星s3测试我的应用程序)。它们应该从屏幕的顶部下来。我使用的是Libgdx,我知道0从左下角开始 这是我的代码,用来设置它们应该从哪里开始 ublic class EntityManager { private final Array<Entity> entities = new Array<Entity>(); public EntityManager(int amount){ fo

所以,我的问题是,我的精灵似乎是从屏幕的左侧到右侧生成的(我正在使用三星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)));
这是我的正射相机设置(上半部分)

这是我全部的正射影像课

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;  
    }  
}  

}  
导入com.badlogic.gdx.gdx;
公共类VirtualViewport{
浮动虚拟宽度;
浮动虚拟重量;
公共浮点getVirtualWidth(){
返回虚拟宽度;
}  
公共浮点getVirtualHeight(){
返回虚拟八;
}  
公共虚拟iewport(浮点虚拟宽度,浮点虚拟高度){
这(虚拟宽度、虚拟高度、假);
}  
公共VirtualViewport(浮点virtualWidth、浮点virtualHeight、布尔收缩){
this.virtualWidth=virtualWidth;
this.virtualHeight=virtualHeight;
}  
公共浮点getWidth(){
返回getWidth(Gdx.graphics.getWidth(),Gdx.graphics.getHeight());
}  
公共浮点getHeight(){
返回getHeight(Gdx.graphics.getWidth(),Gdx.graphics.getHeight());
}  
/** 
*返回视图端口宽度,以便在屏幕上显示所有虚拟视图端口。
*  
*@param屏幕宽度
*屏幕宽度。
*@param屏幕高度
*屏幕高度。
*/  
公共浮动getWidth(浮动屏幕宽度,浮动屏幕高度){
float virtualspect=virtualWidth/virtualHeight;
浮动纵横比=屏幕宽度/屏幕高度;
如果(aspect>virtualspect | |(Math.abs(aspect-virtualspect)<0.01f)){
返回虚拟重量*方面;
}否则{
返回虚拟宽度;
}  
}  
/** 
*返回视图端口高度,以便在屏幕上显示所有虚拟视图端口。
*  
*@param屏幕宽度
*屏幕宽度。
*@param屏幕高度
*屏幕高度。
*/  
公共浮动getHeight(浮动屏幕宽度,浮动屏幕高度){
float virtualspect=virtualWidth/virtualHeight;
浮动纵横比=屏幕宽度/屏幕高度;
如果(aspect>virtualspect | |(Math.abs(aspect-virtualspect)<0.01f)){
返回虚拟八;
}否则{
返回虚拟宽度/方面;
}  
}  
}  
这是我的敌人职业(应该坠落的物体)

公共类扩展实体{
公敌(矢量2位置,矢量2方向){
超级(纹理管理员、敌人、位置、方向);
}
@凌驾
公共无效更新(){
位置添加(方向);

如果(pos.y)您设置了摄像头/视口吗?是的。OrthoCamera和VirtualViewport-请参阅OrthorEdit什么是您的VirtualViewport类?我刚刚设置了virtual和ortho ClassESP。当我将其作为桌面应用程序运行时,它们似乎是自上而下的。而不是使用ANDROID运行时的情况。
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();
  }
 }
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);
    }

}



}