当前位置: 首页 > 知识库问答 >
问题:

游戏屏幕显示黑屏

公孙阳羽
2023-03-14

我目前正在编写一个游戏,你必须避免小行星。我不得不处理一些混乱的坐标,我不得不猜测精灵的坐标。我现在有了描述我的世界的任意单位。不幸的是,我的游戏屏幕不能完全工作。当我想渲染我的小行星时,游戏屏幕会显示一个黑屏。

public class GameScreen extends Screen {

private OrthographicCamera cam;
private Spaceship spaceship;
private Asteroids asteroids;
private Background bg;



@Override
public void create() {
    // TODO Auto-generated method stub

    bg = new Background();
    spaceship = new Spaceship();
    asteroids = new Asteroids();

    float aspectratio = 16/10;

    cam = new OrthographicCamera(100, 100 * aspectratio);

    cam.position.set(cam.viewportWidth / 2f, cam.viewportHeight / 2f, 0);

    cam.update();

    }



@Override
public void render(SpriteBatch batch) {
    // TODO Auto-generated method stub

    cam.update();
    batch.setProjectionMatrix(cam.combined);

    batch.begin();
    bg.render(batch);
    spaceship.render(batch);
    batch.end();

}

上面显示的代码工作正常,并向我展示了以下内容:

当我在GameScreen类中添加小行星的渲染方法时,GameScreen只是黑色的:

    @Override
    public void render(SpriteBatch batch) {
    // TODO Auto-generated method stub

    cam.update();
    batch.setProjectionMatrix(cam.combined);

    batch.begin();
    bg.render(batch);
    spaceship.render(batch);
    batch.end();

    }

小行星等级:

public class Asteroid {

private Vector2 p;
private Vector2 v;

private float mass;
private float radius;

public final float maxV = 200;
public final float minV = 50;

public final float rMin = 10;
public final float rMax = 30;

public final float minX = MyGdxGame.WIDTH;
public final float minY = MyGdxGame.HEIGHT;;

float alpha = MathUtils.random(0, 360);

public Asteroid(float maxX, float maxY, List<Asteroid> asteroids) {

    do {

    radius = MathUtils.random(rMin, rMax);
    masse = radius * radius * radius;

    float alpha = MathUtils.random(0, 360);

    p = new Vector2(MathUtils.random(minX, maxX), MathUtils.random(minY,
            maxY));

    float vBetrag = MathUtils.random(minV, maxV);

    v = new Vector2(vBetrag * MathUtils.cosDeg(alpha),
            vBetrag * MathUtils.cosDeg(alpha));
    } while (ueberlappMit(asteroids));

}

private boolean ueberlappMit(List<Asteroid> asteroids) {

    for(Asteroid a: asteroids){
        if(abstand(a) < radius + a.radius + 10){ //!
            return true;
        }
    }

    return false;

}

public void update(float deltaT, float xMin, float xMax, float yMin, float yMax) {
    p.x += v.x * deltaT;
    p.y += v.y * deltaT;

    while(p.x > xMax)
    {
        p.x -=  (xMax - xMin);  
    }
    while(p.x < xMin)
    {
        p.x += (xMax - xMin);
    }
    while(p.y > yMax)
    {
        p.y -= (yMax - yMin); 
    }
    while(p.y < yMin)
    {
        p.y += (yMax - yMin); 
    } 
}


public float abstand(Asteroid a2) {

    return p.dst(a2.p);

}

小行星等级:

public class Asteroids extends Entity {

private final int numberofAsteroids = 150;
private float xMin, xMax, yMin, yMax;
private List<Asteroid> asteroids = new ArrayList<Asteroid>();

private final int cyclicBoundaryConditionsMultiple = 2; 

public Asteroids() {


    xMin = MyGdxGame.WIDTH * (-cyclicBoundaryConditionsMultiple);
    xMax = MyGdxGame.WIDTH * (cyclicBoundaryConditionsMultiple);
    yMin = MyGdxGame.HEIGHT * (-cyclicBoundaryConditionsMultiple);
    yMax = MyGdxGame.HEIGHT * (cyclicBoundaryConditionsMultiple); 


    for (int i = 0; i < anzahl; i++) {
        Asteroid a = new Asteroid( xMax,  yMax, asteroids);
        asteroids.add(a);
    }

}

@Override
public void update() {

    for (Asteroid a : asteroids) {
        a.update(Gdx.graphics.getDeltaTime(), xMin, xMax, yMin, yMax);
    }

    for (int i = 0; i < numberofAsteroids; i++) {

        Asteroid a1 = asteroids.get(i);

        for (int j = i + 1; j < anzahl; j++) {

            Asteroid a2 = asteroids.get(j);

            float abstand = a1.abstand(a2);

            if (abstand < a1.getRadius() + a2.getRadius()) {

                calculateCollision(a1, a2);

            }

        }

    }

}


}

@Override
public void render(ShapeRenderer renderer) {

    for (Asteroid a : asteroids) {

        System.out.println("RENDER A");

        renderer.setColor(0, 0, 0, 1);
        renderer.circle(a.getP().x, a.getP().y, a.getRadius());

    }

    }

暂时还没有答案

 类似资料:
  • 我是python新手,我想用pygame在屏幕上可视化一个算法。这是我的代码: 但这总是显示一个黑色或有点深灰色的屏幕。有人知道我做错了什么吗?我尝试了多个教程,它们都给了我相同的屏幕。 我正在使用MacOS 10.14

  • 您好,我正在中制作一个游戏,我想知道如何以及最好的方式是在屏幕上添加游戏。以下是玩家健康状况小于或等于0的代码: 我不确定该怎么做,因为我试图使用另一个py呼叫游戏,但玩家死亡的时间被重置为0并返回,所以玩家死亡的地方可能发生任何事情吗?

  • 在游戏开始之前,我想显示一条消息,说“游戏开始!”。消息从左到右穿过屏幕,只有当消息已经消失时,游戏才开始。 我遇到的问题是,lifeTable的实例化需要时间,GameScreen在实例化完成之前就开始运行。我解释说: 当我禁用lifeTable时,一切都运行得很顺利,“游戏开始了!”消息从左到右穿过屏幕,游戏开始。 当我启用lifeTable时,当我按下MainMenueScreen中的“Ne

  • 我目前正在开发一个应用程序,我需要在其中播放一个视频。一切都很好。但是如果我的应用程序被发送到后台,然后又被发送到前台,它会显示一个实心的黑屏。 请给我提供一个解决这个问题的办法。

  • 问题内容: 嗨,我正在编写图形程序,我一直在寻找一种获取所使用屏幕物理尺寸的方法。我可以获得以像素为单位的屏幕大小以及逻辑分辨率。我似乎找不到任何地方可以获取任何显示器规格中始终具有的物理尺寸(例如19“-376 x 301 mm)。问题是,加载此信息时,此信息是否甚至还存储在OS中的任何位置?我正在编写的程序需要在Mac和Windows上运行。 谢谢! nt 问题答案: 我认为Java不可能实现

  • 我正在用pyplay写一个蛇游戏,但我只是提示一个黑色的窗口没有任何错误。 我检查了类似的问题,他们错误地使用了screen对象。然而,这里的情况似乎不是这样,因为它只创建了一次? 知道我做错了什么吗?因为我没有收到任何错误信息,所以我不明白为什么只显示一个黑屏。按键输入事件工作正常。