我正在学习 LibGDX 进行游戏开发,我的游戏在 Box2D 上运行得几乎很好,但只剩下一件事了,设置我的敌人的加速,当我尝试这样做时(我添加 float timer = 0;
值,创建我的 EnemyUserData 类上的 render 方法并向其中添加以下代码
@Override
public void render(float delta, float speed) {
timer += Gdx.graphics.getDeltaTime(); //returns time between two frames
if (timer > 10) { //after 10 seconds
linearVelocity = linearVelocity * 1.1F;
timer = 0; //reset timer
}
}
}
但是程序开始提示以下错误:
Error:(20, 25) Gradle: error: incompatible types: float cannot be converted to Vector2Error:(33, 4) Gradle: error: method does not override or implement a method from a supertypeError:(37, 44) Gradle: error: bad operand types for binary operator '*'
first type: Vector2
second type: float
EnemyUserData 类,如果您需要更多信息:
package com.avoidcrashjump.box2d;
import com.avoidcrashjump.Constants;
import com.avoidcrashjump.enums.UserDataType;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.math.Vector2;
/**
* Created by Felipe on 3/1/2016.
*/
public class EnemyUserData extends UserData {
float timer = 0;
float speed = 200f;
private Vector2 linearVelocity;
public EnemyUserData(float width, float height) {
super(width, height);
userDataType = UserDataType.ENEMY;
linearVelocity = speed;
}
public void setLinearVelocity(Vector2 linearVelocity) {
this.linearVelocity = linearVelocity;
}
public Vector2 getLinearVelocity() {
return linearVelocity;
}
@Override
public void render(float delta, float speed) {
timer += Gdx.graphics.getDeltaTime(); //returns time between two frames
if (timer > 10) { //after 10 seconds
linearVelocity = linearVelocity * 1.1F;
timer = 0; //reset timer
}
}
}
有人可以向我解释一下我做错了什么吗?我尝试将 Vector2 更改为 float,但没有成功。 EnemyUserData 类的新代码如下:
package com.avoidcrashjump.box2d;
import com.avoidcrashjump.Constants;
import com.avoidcrashjump.enums.UserDataType;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.math.Vector2;
/**
* Created by Felipe on 3/1/2016.
*/
public class EnemyUserData extends UserData {
float timer = 0;
float speed = 200f;
private Vector2 linearVelocity;
public EnemyUserData(float width, float height) {
super(width, height);
userDataType = UserDataType.ENEMY;
linearVelocity = speed;
}
public void setLinearVelocity(Vector2 linearVelocity) {
this.linearVelocity = linearVelocity;
}
public Vector2 getLinearVelocity() {
return linearVelocity;
}
@Override
public void render(float delta, float speed) {
timer += Gdx.graphics.getDeltaTime(); //returns time between two frames
if (timer > 10) { //after 10 seconds
linearVelocity = linearVelocity * 1.1F;
timer = 0; //reset timer
}
}
}
这是我制作游戏时必须解决的唯一问题。
最佳答案
基本物理:速度是一个 vector ,每个轴(X、Y、Z...)都有单独的速度,因此您不能将拳头速度简化为简单的速度标量值。
LibGDX 的 vector 似乎不会覆盖 * 运算符,因此您必须像这样缩放 vector :
linearVelocity.scl(1.1);
关于java - LibGDX设置加速错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35762223/