Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 矩形';s定位/工作不正确_Java_Android_Libgdx - Fatal编程技术网

Java 矩形';s定位/工作不正确

Java 矩形';s定位/工作不正确,java,android,libgdx,Java,Android,Libgdx,我正在Android Studio中尝试用Libgdx制作一个简单的游戏,玩家可以左右移动一艘宇宙飞船,避开屏幕上随机出现的小行星。一切正常,除了矩形在小行星上的位置不正确,或者在碰撞后没有记录重叠以结束游戏 目前,只有当一颗小行星落下时,玩家坐在游戏的右手边,游戏才会结束,任何其他位置(即使靠近右手边)都不做任何事情 任何帮助都将不胜感激 我有这艘船的等级: package com.mygdx.game.Sprites; import com.badlogic.gdx.gra

我正在Android Studio中尝试用Libgdx制作一个简单的游戏,玩家可以左右移动一艘宇宙飞船,避开屏幕上随机出现的小行星。一切正常,除了矩形在小行星上的位置不正确,或者在碰撞后没有记录重叠以结束游戏

目前,只有当一颗小行星落下时,玩家坐在游戏的右手边,游戏才会结束,任何其他位置(即使靠近右手边)都不做任何事情

任何帮助都将不胜感激

我有这艘船的等级:

    package com.mygdx.game.Sprites;

    import com.badlogic.gdx.graphics.Texture;
    import com.badlogic.gdx.math.Rectangle;
    import com.badlogic.gdx.math.Vector3;
    import com.mygdx.game.Game2;



    public class Ship {
    private static int gravity;
    private static int MOVEMENT = 50;


    private Vector3 position;
    private Vector3 velocity;
    private Rectangle bounds;

    private Texture ship;

    public Ship(int x, int y){
        position = new Vector3(x, y, 0);
        velocity = new Vector3(0, 0, 0);
        ship = new Texture("Ship3.png");
        bounds = new Rectangle(x, y, ship.getWidth(), ship.getHeight());
        // - 10 maybe for shape not being square
    }

    public void update(float dt){
        velocity.add(gravity, 0, 0);
        velocity.scl(dt);
        position.add(velocity.x, MOVEMENT*dt, 0);

        if (position.x < 0)
            position.x = 0;

        if(position.x + ship.getWidth() >= Game2.WIDTH/2) {
        position.x = Game2.WIDTH/2 - ship.getWidth();

       bounds.setPosition(position.x, position.y);

        }


    }
    public Vector3 getPosition() {
        return position;
    }

    public Texture getTexture() {
        return ship;
    }

    public void turnLeft(){
        gravity = -100;

    }

    public void turnRight() {
        gravity = 100;
    }

    public Rectangle getBounds(){
        return bounds;
    }

    public boolean collides(Rectangle asta){
        return asta.overlaps(bounds);
    }
}
我的游戏状态:

    package com.mygdx.game.States;

import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.utils.Array;
import com.mygdx.game.Game2;
import com.mygdx.game.Sprites.Asta;
import com.mygdx.game.Sprites.Ship;


public class PlayState extends State {
    private static final int ASTA_SPACING = 125;
    private static final int ASTA_COUNT = 4;

    private Ship ship;
    private Texture background;
    private Array<Asta> astas;


    public PlayState(GameStateManager gsm) {
        super(gsm);
       ship = new Ship(Game2.WIDTH/4, Game2.HEIGHT/8);
        cam.setToOrtho(false, Game2.WIDTH/2, Game2.HEIGHT/2);
        // /2
        background = new Texture("Background1.png");
        astas = new Array<Asta>();
        for (int i = 0; i <= ASTA_COUNT; i++){
            astas.add(new Asta(i * ASTA_SPACING + Asta.ASTA_HEIGHT));
        }
    }

    @Override
    protected void handleInput() {
        if (Gdx.input.justTouched())
        ship.turnLeft();
        {
            if (Gdx.input.getX() > Gdx.graphics.getWidth() / 2)
            {
                ship.turnRight();
            }
            else
            {
                ship.turnLeft();
            }
        }
        }

    @Override
    public void update(float dt) {
        handleInput();
        ship.update(dt);

        cam.position .y = ship.getPosition().y+50 ;
        //moves the camera focus around the ship;

        for (Asta asta: astas){
            if (cam.position.y - (cam.viewportHeight/2) > asta.getPosRightAsta().y + asta.getRightasta().getHeight()){
                asta.reposition(asta.getPosRightAsta().y + ((Asta.ASTA_HEIGHT + ASTA_SPACING) * ASTA_COUNT));
            }
            if (asta.collides(ship.getBounds()))
                gsm.set(new MenuState(gsm));
        }

        cam.update();
    }

    @Override
    public void render(SpriteBatch sb) {
        sb.setProjectionMatrix(cam.combined);
        sb.begin();
        sb.draw(background, 0, cam.position.y - (cam.viewportHeight / 2), Game2.WIDTH /2, Game2.HEIGHT /2);
        ///2
        sb.draw(ship.getTexture(), ship.getPosition().x, ship.getPosition().y);
        for (Asta asta : astas) {
            sb.draw(asta.getRightasta(), asta.getPosRightAsta().x, asta.getPosRightAsta().y);
            sb.draw(asta.getLeftasta(), asta.getPosLeftAsta().x, asta.getPosRightAsta().y);}
            sb.end();
        }

        @Override
        public void dispose () {

        }
    }
package com.mygdx.game.States;
导入com.badlogic.gdx.gdx;
导入com.badlogic.gdx.graphics.Texture;
导入com.badlogic.gdx.graphics.g2d.SpriteBatch;
导入com.badlogic.gdx.utils.Array;
导入com.mygdx.game.Game2;
导入com.mygdx.game.Sprites.Asta;
导入com.mygdx.game.Sprites.Ship;
公共类PlayState扩展了状态{
专用静态最终int ASTA_间距=125;
私有静态最终int ASTA_计数=4;
私人船舶;
私有纹理背景;
专用阵列ASTA;
公共播放状态(GameStateManager gsm){
超级(gsm);
船=新船(游戏2.WIDTH/4,游戏2.HEIGHT/8);
凸轮设置为(假,Game2.WIDTH/2,Game2.HEIGHT/2);
// /2
背景=新纹理(“Background1.png”);
astas=新数组();
对于(int i=0;i Gdx.graphics.getWidth()/2)
{
船舶右转();
}
其他的
{
船舶左转弯();
}
}
}
@凌驾
公共无效更新(浮动dt){
handleInput();
船舶更新(dt);
cam.position.y=ship.getPosition().y+50;
//围绕船舶移动相机焦点;
对于(Asta Asta:astas){
如果(cam.position.y-(cam.viewportHeight/2)>asta.getPosRightAsta().y+asta.getRightasta().getHeight()){
asta.resposition(asta.getPosRightAsta().y+((asta.asta_高度+asta_间距)*asta_计数));
}
if(asta.collides(ship.getBounds()))
gsm.set(新菜单(gsm));
}
cam.update();
}
@凌驾
公共无效渲染(SpriteBatch sb){
sb.设置投影矩阵(凸轮组合);
某人开始做某事;
sb绘制(背景,0,cam.position.y-(cam.viewportHeight/2),Game2.WIDTH/2,Game2.HEIGHT/2);
///2
绘制(ship.getTexture(),ship.getPosition().x,ship.getPosition().y);
对于(Asta Asta:astas){
sb.draw(asta.getRightasta(),asta.getPosRightAsta().x,asta.getPosRightAsta().y);
sb.draw(asta.getLeftasta(),asta.getPosLeftAsta().x,asta.getPosRightAsta().y);}
(某人结束);
}
@凌驾
公共空间处置(){
}
}

你的
小行星是静止的吗
如果没有它们运动的代码在哪里?对不起,我必须奇怪地解释一下,小行星静止不动/是静止的,当飞船在屏幕上向上移动时,一旦小行星进入屏幕下方,它们就会被重新定位到顶部,“公共空间重新定位(浮动y)”会执行此操作
    package com.mygdx.game.States;

import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.utils.Array;
import com.mygdx.game.Game2;
import com.mygdx.game.Sprites.Asta;
import com.mygdx.game.Sprites.Ship;


public class PlayState extends State {
    private static final int ASTA_SPACING = 125;
    private static final int ASTA_COUNT = 4;

    private Ship ship;
    private Texture background;
    private Array<Asta> astas;


    public PlayState(GameStateManager gsm) {
        super(gsm);
       ship = new Ship(Game2.WIDTH/4, Game2.HEIGHT/8);
        cam.setToOrtho(false, Game2.WIDTH/2, Game2.HEIGHT/2);
        // /2
        background = new Texture("Background1.png");
        astas = new Array<Asta>();
        for (int i = 0; i <= ASTA_COUNT; i++){
            astas.add(new Asta(i * ASTA_SPACING + Asta.ASTA_HEIGHT));
        }
    }

    @Override
    protected void handleInput() {
        if (Gdx.input.justTouched())
        ship.turnLeft();
        {
            if (Gdx.input.getX() > Gdx.graphics.getWidth() / 2)
            {
                ship.turnRight();
            }
            else
            {
                ship.turnLeft();
            }
        }
        }

    @Override
    public void update(float dt) {
        handleInput();
        ship.update(dt);

        cam.position .y = ship.getPosition().y+50 ;
        //moves the camera focus around the ship;

        for (Asta asta: astas){
            if (cam.position.y - (cam.viewportHeight/2) > asta.getPosRightAsta().y + asta.getRightasta().getHeight()){
                asta.reposition(asta.getPosRightAsta().y + ((Asta.ASTA_HEIGHT + ASTA_SPACING) * ASTA_COUNT));
            }
            if (asta.collides(ship.getBounds()))
                gsm.set(new MenuState(gsm));
        }

        cam.update();
    }

    @Override
    public void render(SpriteBatch sb) {
        sb.setProjectionMatrix(cam.combined);
        sb.begin();
        sb.draw(background, 0, cam.position.y - (cam.viewportHeight / 2), Game2.WIDTH /2, Game2.HEIGHT /2);
        ///2
        sb.draw(ship.getTexture(), ship.getPosition().x, ship.getPosition().y);
        for (Asta asta : astas) {
            sb.draw(asta.getRightasta(), asta.getPosRightAsta().x, asta.getPosRightAsta().y);
            sb.draw(asta.getLeftasta(), asta.getPosLeftAsta().x, asta.getPosRightAsta().y);}
            sb.end();
        }

        @Override
        public void dispose () {

        }
    }