【问题标题】:LibGDX setting up acceleration errorLibGDX 设置加速错误
【发布时间】:2016-06-16 04:35:45
【问题描述】:

我正在学习用于游戏开发的 LibGDX,我的游戏在 Box2D 上运行得几乎不错,但只剩下一件事,即为我的敌人设置加速,当我尝试这样做时(我添加了 float timer = 0; 值,创建我的 EnemyUserData 类上的渲染方法并向其中添加以下代码

@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
        }
    }
}

这是我制作游戏的唯一问题。

【问题讨论】:

    标签: java android android-studio libgdx


    【解决方案1】:

    基本物理学:速度一个向量,你在每个轴(X、Y、Z...)上都有单独的速度,所以你不能只是不能把拳头速度变成一个简单的速度标量值。

    似乎 LibGDX 的向量没有覆盖 * 运算符,因此您必须像这样缩放向量:

    linearVelocity.scl(1.1);
    

    【讨论】:

    • 另请注意,有一个Vector2#scl(float) 方法,它应该做同样的事情。
    • OP 应该使用它,它更紧凑,更清楚地表明意图。好收获@Springrbua
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-28
    • 2014-12-07
    • 2014-05-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多