我可能遗漏了一些简单的东西,不知道是什么。我正在练习并重新创建Pong,看看它会如何发展。
我有这个:
package com.gibbo.pong;
enter code here
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Screen;
import com.badlogic.gdx.graphics.GL10;
import com.badlogic.gdx.graphics.OrthographicCamera;
import com.badlogic.gdx.math.Vector2;
import com.badlogic.gdx.physics.box2d.Box2DDebugRenderer;
import com.badlogic.gdx.physics.box2d.CircleShape;
import com.badlogic.gdx.physics.box2d.World;
public class GameScreen implements Screen {
// Object instances
Pong pong;
Paddle paddle;
Walls wall;
Ball ball;
OrthographicCamera cam;
public static World world;
Box2DDebugRenderer debug;
// Booleans for paddles
private boolean playerOne = false;
private boolean playerTwo = false;
// Booleans for walls
private boolean wallTop = false;
private boolean wallBottom = false;
// Fields for the balls
private boolean ballExists = false;
private int ballTotal;
//Array to hold ball objects
Ball[] ballArray = new Ball[3];
// GameScreen default constructor
public GameScreen(Pong pong) {
this.pong = pong;
// Initiate the camera
cam = new OrthographicCamera(20f, 14f);
cam.position.set(10f, 7f, 0);
// Initiate the world, no gravity
world = new World(new Vector2(0, -10), true);
// Initiate the renderer
debug = new Box2DDebugRenderer();
// Initiate the paddle
paddle = new Paddle();
//Initiate the walls
wall = new Walls();
//Initiate the ball
ball = new Ball();
}
public void render(float delta) {
// Clear the screen and fill it black
Gdx.gl.glClearColor(0, 0, 0, 1);
Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
// Update the camera
cam.update();
// Render the debug lines
debug.render(world, cam.combined);
// Check if paddles exist, if not create them
if (!playerOne) {
paddle.createPaddle(1, 7);
playerOne = true;
System.out.println("Creating player ones paddle");
}
if (!playerTwo) {
paddle.createPaddle(19, 7);
playerTwo = true;
System.out.println("Creating player twos paddle");
}
//Check if walls exist, if not create them
if(!wallBottom){
wall.createWalls(0, 0.1f);
wallBottom = true;
System.out.println("Creating top wall");
}
if(!wallTop){
wall.createWalls(0, 13f);
wallTop = true;
System.out.println("Creating bottom wall");
}
//Checks if ball exists
if(!ballExists){
ball.createBall(10f, 7f);
ballExists = true;
if(ballTotal == 0){
System.out.println("Creating ball number 1");
ballTotal += 1;
}else{
System.out.println("Creating ball number "+ballTotal + 1);
}
}
if(ball.ballBody.getPosition().x < 0){
System.out.println("Player twos point");
ball.destroyBall();
}
boolean test = true;
if(test){
ball.ballBody.setLinearVelocity(-10, 0);
System.out.println("Does this work?");
}
// Simulate the world with frame rate
// Keep at bottom of render when possible
world.step(1 / 60, 6, 2);
}
我正在使用其他3个类,一个用于球,一个用于墙,一个用于桨。主要是练习如何让它们一起工作,传递参数等等。这里写的所有内容都是LibGDX网站和C ++ box2d手册的混合教程。
这是我的球类:
package com.gibbo.pong;
import com.badlogic.gdx.physics.box2d.Body;
import com.badlogic.gdx.physics.box2d.BodyDef;
import com.badlogic.gdx.physics.box2d.BodyDef.BodyType;
import com.badlogic.gdx.physics.box2d.CircleShape;
import com.badlogic.gdx.physics.box2d.Fixture;
import com.badlogic.gdx.physics.box2d.FixtureDef;
import com.badlogic.gdx.physics.box2d.World;
public class Ball {
//Instance of the world
World world;
//Body for the ball
Body ballBody;
//Fixture for the ball
Fixture ballFixture;
public void createBall(float posX, float posY){
//Define a body for the ball
BodyDef ballBodyDef = new BodyDef();
ballBodyDef.type = BodyType.DynamicBody;
ballBodyDef.position.set(posX, posY);
//Define a shape for the ball
CircleShape ballShape = new CircleShape();
ballShape.setRadius(0.50f);
//Define a fixture for the ball
FixtureDef ballFixtureDef = new FixtureDef();
ballFixtureDef.shape = ballShape;
ballFixtureDef.density = 1;
//Create a ball
ballBody = GameScreen.world.createBody(ballBodyDef);
ballFixture = ballBody.createFixture(ballFixtureDef);
ballShape.dispose();
ballBody.setLinearVelocity(-10, 0.1f);
}
相当直接,可以很容易地在GameScreen
课程中实施,但为了练习和整洁,我接受了这一点。我已经尝试过在这里设置LinearVelocity,并且在球的GameScreen中,我试图模拟如果球击中球拍会发生什么,它会如何反应以及是否可以在屏幕上摧毁一个球的方法。
但由于某种原因,一切都只是“卡住”。好像一切都是静止的。我甚至尝试在对象阵列中创建球,所以我可以做balls[0].setxxxx
,但这一切都很有趣。
我是否需要为我的球和其他类创建构造函数?我的桨,墙和球是否会连续渲染并被迫保持在同一位置?
关于带有print方法的随机if语句,只是测试是否甚至达到了该方法,因此强制它通过使用它来运行。
我在这里失败的任何地方?
提前致谢。
答案 0 :(得分:1)
拍我,结果是整数除法很糟糕。
我不得不改变:
world.step(1/60, 6, 2)
为:
world.step(1f/60f, 6, 2)
哇,这很烦人,但很简单大声笑。