两个 lib-gdx 维度中的重力
Gravity in two lib-gdx dimensions
我正在开发一款受第一款乒乓球游戏启发的应用程序。所以只有两个杆和一个球,两个玩家可以通过用手指移动这些杆来互相挑战。
该应用程序适用于 android 手机,开发时间为 java。
我用的是gdx lib框架
这就是游戏风格
Style Example
一切看起来都很简单,直到我不得不开发球的引力。
制作一款2d游戏的引力,看似并不复杂,实则相当困难。事实上,经过多次尝试开发游戏,我设置了一个随机重力。简而言之,球不遵循逻辑,而是相对于击中屏幕的一侧朝着随机方向移动。
结果是这样的,一个生成随机数的函数。
public void gravity(){
switch (gravitylevel){
case 1:
if(gravitychanche){
gravity.setXincrement(rand.getX());
gravity.setYincrement(rand.getY());
}
else{
gravity.setXdecrement(rand.getX());
gravity.setYincrement(rand.getY());
}
break;
case 2:
if(gravitychanche){
gravity.setXdecrement(rand.getX());
gravity.setYdecrement(rand.getY());
}
else{
gravity.setXincrement(rand.getX());
gravity.setYdecrement(rand.getY());
}
break;
case 3:
if(gravitychanche){
gravity.setXdecrement(rand.getX());
gravity.setYdecrement(rand.getY());
}
else{
gravity.setXdecrement(rand.getX());
gravity.setYincrement(rand.getY());
}
break;
case 4:
if(gravitychanche){
gravity.setXincrement(rand.getX());
gravity.setYincrement(rand.getY());
}
else{
gravity.setXincrement(rand.getX());
gravity.setYdecrement(rand.getY());
}
break;
}
}
这段代码非常简陋,但是当我试图在 lib gdx 上重现一个相当逼真的重力时,所有的指南都强迫我为一个三维游戏做一个重力。有没有办法在 lib gdx 上创建一个不太复杂的二维引力?
你真的不需要重力。 对球使用速度矢量要容易得多。如果球撞到墙或玩家的横杆,您只需反转速度的 x 或 y 分量。
像这样(简化):
public class Game {
private Ball ball;
public void spawnBall() {
ball = new Ball();
ball.velocity = new Vector2(Math.random(), Math.random()); // init with a random vector
}
public void moveBall() {
ball.position = ball.position.add(ball.velocity); // move the ball by it's velocity
}
public void changeBallDirection() {
if (ballHitPlayerBar()) {
ball.velocity.x *= -1; // invert x direction
}
else if (ballHitTopOrBottomOfField()) {
ball.velocity.y *= -1; // invert y direction
}
// TODO maybe move the ball a bit, to prevent it from touching the bar or the field border multiple times...
}
}
我正在开发一款受第一款乒乓球游戏启发的应用程序。所以只有两个杆和一个球,两个玩家可以通过用手指移动这些杆来互相挑战。 该应用程序适用于 android 手机,开发时间为 java。
我用的是gdx lib框架
这就是游戏风格
Style Example
一切看起来都很简单,直到我不得不开发球的引力。
制作一款2d游戏的引力,看似并不复杂,实则相当困难。事实上,经过多次尝试开发游戏,我设置了一个随机重力。简而言之,球不遵循逻辑,而是相对于击中屏幕的一侧朝着随机方向移动。
结果是这样的,一个生成随机数的函数。
public void gravity(){
switch (gravitylevel){
case 1:
if(gravitychanche){
gravity.setXincrement(rand.getX());
gravity.setYincrement(rand.getY());
}
else{
gravity.setXdecrement(rand.getX());
gravity.setYincrement(rand.getY());
}
break;
case 2:
if(gravitychanche){
gravity.setXdecrement(rand.getX());
gravity.setYdecrement(rand.getY());
}
else{
gravity.setXincrement(rand.getX());
gravity.setYdecrement(rand.getY());
}
break;
case 3:
if(gravitychanche){
gravity.setXdecrement(rand.getX());
gravity.setYdecrement(rand.getY());
}
else{
gravity.setXdecrement(rand.getX());
gravity.setYincrement(rand.getY());
}
break;
case 4:
if(gravitychanche){
gravity.setXincrement(rand.getX());
gravity.setYincrement(rand.getY());
}
else{
gravity.setXincrement(rand.getX());
gravity.setYdecrement(rand.getY());
}
break;
}
}
这段代码非常简陋,但是当我试图在 lib gdx 上重现一个相当逼真的重力时,所有的指南都强迫我为一个三维游戏做一个重力。有没有办法在 lib gdx 上创建一个不太复杂的二维引力?
你真的不需要重力。 对球使用速度矢量要容易得多。如果球撞到墙或玩家的横杆,您只需反转速度的 x 或 y 分量。
像这样(简化):
public class Game {
private Ball ball;
public void spawnBall() {
ball = new Ball();
ball.velocity = new Vector2(Math.random(), Math.random()); // init with a random vector
}
public void moveBall() {
ball.position = ball.position.add(ball.velocity); // move the ball by it's velocity
}
public void changeBallDirection() {
if (ballHitPlayerBar()) {
ball.velocity.x *= -1; // invert x direction
}
else if (ballHitTopOrBottomOfField()) {
ball.velocity.y *= -1; // invert y direction
}
// TODO maybe move the ball a bit, to prevent it from touching the bar or the field border multiple times...
}
}