2016-03-03 46 views
0

我正在学习LibGDX进行游戏开发,我的游戏在Box2D上运行的很好,但只剩下一件事,为我的敌人设置加速度,当我尝试这样做时(我添加了float timer = 0;值,在我的EnemyUserData类创建一个渲染方法和下面的代码添加到它LibGDX设置加速错误

@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更改为浮动,并没有工作。对于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 
     } 
    } 
} 

这是我必须做我的比赛只是时间问题。

回答

2

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

看来LibGDX的载体不会覆盖*运营商,所以你必须调整像这样的载体:

linearVelocity.scl(1.1); 
+1

还要注意,有一个[Vector2#SCL(浮动)(https://开头libgdx .badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/math/Vector2.html#scl-float-)方法,它应该做同样的事情。 – Springrbua

+0

OP应该使用它来代替,它更紧凑,更清楚地表明意图。好的@Springrbua – Machinarius