libgdx - implementing moving Kinematic body(Libgdx-实现移动运动学实体)
问题描述
项目:我正在做一个简单的项目,我希望能够创建一个运动学实体,并将其从x点移动到y点。似乎没有太多直接关于"创建运动体"的内容。我一直在遵循几个不同的关于实现运动学身体的教程,因为我找不到一个具体说明如何正确完成的教程。
问题:这似乎是一个简单的解决方法,但我就是想不出问题是什么,因为我不完全理解如何实现运动学身体。我认为问题出在此代码kinematicBody.setLinearVelocity(0.0f, 1.0f);中,因为我在"setLinearVelocity"中收到错误,声明"未为BodyDef类型定义方法setLinearVelocity(Float,Float)"我觉得我在这里做错了什么
我想要的结果:我希望能够创建从x点移动到y点的运动学实体。
以下是我的相关代码:
    package com.mohamed.JungleFighter;
import com.badlogic.gdx.ApplicationAdapter;
import com.badlogic.gdx.Game;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.OrthographicCamera;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.math.Vector2;
import com.badlogic.gdx.physics.box2d.BodyDef;
import com.badlogic.gdx.physics.box2d.BodyDef.BodyType;
import com.badlogic.gdx.physics.box2d.Box2DDebugRenderer;
import com.badlogic.gdx.physics.box2d.CircleShape;
import com.badlogic.gdx.physics.box2d.FixtureDef;
import com.badlogic.gdx.physics.box2d.PolygonShape;
import com.badlogic.gdx.physics.box2d.World;
import com.sun.xml.internal.ws.wsdl.writer.document.soap.Body;
public class JungleFighter extends Game {
  World world = new World(new Vector2(0, -100), true);  
  Box2DDebugRenderer debugRenderer;  
  OrthographicCamera camera;  
  static final float STEP=1/60f;  
  static final int VELOCITYITERATIONS=6;  
  static final int POSITIONITERATIONS=2;  
  static final float WORLD_TO_BOX=0.01f;  
  static final float BOX_WORLD_TO=100f;  
  @Override  
  public void create() {            
       camera = new OrthographicCamera();  
       camera.viewportHeight = 320;  
       camera.viewportWidth = 480;  
       camera.position.set(camera.viewportWidth * .5f, camera.viewportHeight * .5f, 0f);  
       camera.update(); 
 //test platform 3
           BodyDef kinematicBody =new BodyDef();  
       kinematicBody.type = BodyType.KinematicBody;
       kinematicBody.position.set(100, 250);
       PolygonShape shape = new PolygonShape();
       shape.setAsBox(50f, 25f);
       fixtureDef.shape = shape;
       fixtureDef.density = 0;
       fixtureDef.friction = 0;
       fixtureDef.restitution = 0;
       kinematicBody.setLinearVelocity(0.0f, 1.0f);
       // Create our body in the world using our body definition
       world.createBody(kinematicBody).createFixture(shape, 50.0f);
       shape.dispose();
       debugRenderer = new Box2DDebugRenderer();  
  }  
  @Override  
  public void dispose() {  
  }  
  @Override  
  public void render() {            
       Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);  
       debugRenderer.render(world, camera.combined);  
       world.step(STEP, VELOCITYITERATIONS, POSITIONITERATIONS);  
  }  
  @Override  
  public void resize(int width, int height) {  
  }  
  @Override  
  public void pause() {  
  }  
  @Override  
  public void resume() {  
    }  
 }  
推荐答案
您似乎没有在任何地方使用FixtureDef对象。您应该在创建正文后将其设置为正文。
创建运动学实体的方式与创建静态实体的方式没有太大区别。唯一的区别是如何定义BodyDef的类型。
创建运动学实体 它也可以是StaticBody或DynamicBody。取决于您要实现的目标。
BodyDef tempBodyDef = new BodyDef();
tempBodyDef.type = BodyType.KinematicBody;
创建FixtureDefinition(描述装置属性的定义)
还可以创建造型并将其指定给设备。
您可以修改tempFD的Function、isSensor等属性以获得所需的结果。
FixtureDef tempFD = new FixtureDef();
PolygonShape tempShape = new PolygonShape();
tempFD.shape = tempShape;
正文形状的中心将位于0,0
Vector2 tempVector = new Vector2();
tempVector.x = 0;
tempVector.y = 0;
设置主体形状的大小和位置。 请注意,我使用的是宽度和高度的一半,因为这是setAsBox函数需要的。
tempShape.setAsBox(myWidth/2f, myHeight/2f, tempVector, myAngle);
tempBodyDef.position.set(myXPosition, myYPosition);
创建主体并为其指定夹具
Body testBody = world.createBody(tempBodyDef);
testBody.createFixture(tempFD);
使用完形状后,不要忘记处理它。
tempShape.dispose();
您完成了。
这篇关于Libgdx-实现移动运动学实体的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:Libgdx-实现移动运动学实体
				
        
 
            
        - 未找到/usr/local/lib 中的库 2022-01-01
 - 转换 ldap 日期 2022-01-01
 - Eclipse 的最佳 XML 编辑器 2022-01-01
 - 在 Java 中,如何将 String 转换为 char 或将 char 转换 2022-01-01
 - GC_FOR_ALLOC 是否更“严重"?在调查内存使用情况时? 2022-01-01
 - 如何指定 CORS 的响应标头? 2022-01-01
 - 如何使 JFrame 背景和 JPanel 透明且仅显示图像 2022-01-01
 - 将 Java Swing 桌面应用程序国际化的最佳实践是什么? 2022-01-01
 - java.lang.IllegalStateException:Bean 名称“类别"的 BindingResult 和普通目标对象都不能用作请求属性 2022-01-01
 - 获取数字的最后一位 2022-01-01
 
						
						
						
						
						
				
				
				
				