我目前正在学习在Libgdx中编写2d游戏代码。现在我在做一种蠕虫克隆。到目前为止,我正在使用Box2d,只有我的主要精灵和一个平坦的地面对象。
我坚持的是为主角做十字线,当玩家按上下键时,我想在90 of的距离内围绕他旋转。
以下是我到目前为止所拥有的代码,但我甚至没有尝试过旋转代码:
package com.supermegabrobro.apoca.Sprites;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Input;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.Batch;
import com.badlogic.gdx.graphics.g2d.Sprite;
import com.badlogic.gdx.math.Vector2;
import com.badlogic.gdx.physics.box2d.Body;
import com.badlogic.gdx.physics.box2d.BodyDef;
import com.badlogic.gdx.physics.box2d.CircleShape;
import com.badlogic.gdx.physics.box2d.FixtureDef;
import com.supermegabrobro.apoca.Screens.PlayScreen;
public class ArmyDude extends Sprite {
PlayScreen playScreen;
BodyDef bodyDef;
Body body;
FixtureDef fixtureDef;
boolean crossHairShowing = false;
Texture crossHairTexture;
float crossHairDistance = 30f;
float crossHairAngle = 45f;
Vector2 crossHairPosition;
public ArmyDude(PlayScreen playScreen){
super(new Texture("armydude.png"));
this.playScreen = playScreen;
bodyDef = new BodyDef();
bodyDef.type = BodyDef.BodyType.DynamicBody;
bodyDef.position.set(0,0); // TODO: Make this random
body = playScreen.world.createBody(bodyDef);
CircleShape circleShape = new CircleShape();
circleShape.setRadius(getWidth() / 2);
fixtureDef = new FixtureDef();
fixtureDef.shape = circleShape;
body.createFixture(fixtureDef);
crossHairTexture = new Texture("crosshair.png");
crossHairPosition = new Vector2(0,0);
}
public void update(float dt){
setPosition(body.getPosition().x - getWidth() / 2, body.getPosition().y - getHeight() / 2);
if(Gdx.input.isKeyPressed(Input.Keys.UP)){
crossHairShowing = true;
}
}
@Override
public void draw(Batch batch) {
super.draw(batch);
if (crossHairShowing){
}
}
}
任何帮助都是非常感谢的,谢谢。(注:我已经阅读了,并在以前的项目中实施了正常旋转的精灵。但我认为这是非常不同的,因为我试图不旋转实际的精灵,而是画一个纹理(交叉的),围绕这个精灵旋转。
我真的被困住了,虽然我可怜的大脑无法独自解决这个问题。
发布于 2016-11-11 02:31:01
通常这样的问题可以用向量几何来解决。利用矢量的基本思想,可以更容易地解决与坐标系有关的问题。
对于你的游戏,步骤如下:
angle
和crosshairVector
;创建Vector2 crosshairVector =新Vector2;现在,在向量crosshairVector
中有十字线的位置。使用crosshairVector.x
和crosshairVector.y
,可以得到x和y值。要旋转横发,只需改变角度变量。
如果你想了解更多关于向量的基本知识,你可以看看:https://www.mathsisfun.com/algebra/vectors.html
https://gamedev.stackexchange.com/questions/132837
复制相似问题