我有一个矩形,我想快速移动,但出于什么原因,我使用的速度更快似乎仍然很慢.我究竟做错了什么?我也从上面掉了一个圆圈到一个表面,甚至很难我用重力玩它像气球一样下来......
一些声明
float velocity = 10000000f;
static final float BOX_STEP=1/60f;
static final int BOX_VELOCITY_ITERATIONS=6;
static final int BOX_POSITION_ITERATIONS=2;
Run Code Online (Sandbox Code Playgroud)
重力,尝试了一切,他们似乎都很糟糕
world = new World(new Vector2(0,-50),true);
我的对象正在移动到地面
//ground
BodyDef groundBodyDef =new BodyDef();
groundBodyDef.position.set(new Vector2(0, camera.viewportHeight * .08f));
Body groundBody = world.createBody(groundBodyDef);
PolygonShape groundBox = new PolygonShape();
groundBox.setAsBox((camera.viewportWidth) * 2, camera.viewportHeight * .08f);
groundBody.createFixture(groundBox, 0.0f);
Run Code Online (Sandbox Code Playgroud)
然后这是我的对象:
//ball
bodyDef = new BodyDef();
bodyDef.type = BodyType.DynamicBody;
bodyDef.position.set(new Vector2(camera.viewportWidth * .2f, camera.viewportHeight * .75f));
body = world.createBody(bodyDef);
CircleShape dynamicCircle = new CircleShape();
dynamicCircle.setRadius(camera.viewportWidth * .035f);
FixtureDef …Run Code Online (Sandbox Code Playgroud) 我已经用相机设置了一个场景
cam = new PerspectiveCamera(80, w, h);
cam.position.set(0, 0, -1);
cam.lookAt(0, 0, 0);
cam.update();
Run Code Online (Sandbox Code Playgroud)
但是有些场景丢失了,因为它超出了相机的视距.
CircleShape circle = new CircleShape();
circle.setRadius(1f);
...
using
...
batch.draw(textureRegion, position.x - 1, position.y - 1,
1f, 1f,
2, 2,
1, 1,
angle);
Run Code Online (Sandbox Code Playgroud)
我使用它来设置Box2d碰撞的主体但是我在libGdx中的纹理周围得到了一个愚蠢的圆形,即我的纹理精灵(球)在它的顶部有一个圆圈,沿着半径从中心开始有一条线.
有关如何删除上覆圆线的任何想法?
两个版本都可以使用,但我不确定使用哪个以及为什么要使用该版本?如果您已经卸载资产,是否需要处理TextureAtlas?
版本1:加载包文件(带位置数据的TexturePacker文件)和png.
gameSpriteSheet = new TextureAtlas(Gdx.files.internal(DATA_DIR_PATH + "GameSpritesPack.txt"));
assetManager.load(DATA_DIR_PATH + "GameSpritesPack.txt");
assetManager.load(DATA_DIR_PATH + "GameSpritesPack.png");
// Call only if assetmanager's update method returns true
headerRegion = getTexture("MainMenuHeader", gameSpriteSheet);
Run Code Online (Sandbox Code Playgroud)
要卸载:
if (assetManager.isLoaded(DATA_DIR_PATH + "GameSpritesPack.txt")) {
assetManager.unload(DATA_DIR_PATH + "GameSpritesPack.txt");
}
if (assetManager.isLoaded(DATA_DIR_PATH + "GameSpritesPack.png")) {
assetManager.unload(DATA_DIR_PATH + "GameSpritesPack.png");
}
if(gameSpriteSheet != null) {
gameSpriteSheet.dispose();
}
Run Code Online (Sandbox Code Playgroud)
版本2:仅加载包文件(带位置数据的TexturePacker文件).
assetManager.load(DATA_DIR_PATH + "GameSpritesPack.txt");
// Call only if assetmanager's update method returns true
gameSpriteSheet = assetManager.get(DATA_DIR_PATH + "GameSpritesPack.txt", TextureAtlas.class);
headerRegion = getTexture("MainMenuHeader", gameSpriteSheet);
Run Code Online (Sandbox Code Playgroud)
要卸载:
if (assetManager.isLoaded(DATA_DIR_PATH + "GameSpritesPack.txt")) …Run Code Online (Sandbox Code Playgroud) 有没有办法知道libgdx中两个Rectangle之间的交叉矩形区域,如c#http://msdn.microsoft.com/en-us/library/microsoft.xna.framework.rectangle.intersect.aspx中的Rectangle ?
我需要获得两个矩形之间的交集矩形区域,但libgdx中的重叠方法只返回两个矩形是否相交的布尔值.我已经阅读过Intersector类,但它没有提供任何帮助.
我正在重构我在libgdx中开发的小RPG.
我有一个普遍的问题,如何正确使用纹理图集.我有100个精灵和大约10种精灵.目前我不使用地图册,但我想增加渲染性能,因为如果我的游戏循环,这是唯一需要花费很长时间的东西.(得到大约100个绑定和15个渲染调用...)
所以它看了一下git的TextureAtlasClass 链接,并想知道我是如何从它获得更多性能的.如果我用正确的纹理得到它的精灵,我会得到一个副本,所以我仍然会切换OpenGL绑定吗?所以这不是一个更好的解决方案,如果我有100个演员都拥有它自己的精灵,或者我错了它,我只是没有做到这一点?
Atlas本身确实建议不要getsprite多次调用,但我需要这样做,这样每个actor都拥有自己的sprite并拥有自己的状态.
也许你可以给我一个小例子如何在不切换OpenGL绑定的情况下使用来自一个地图集的多个精灵.这应该是使用地图集的原因,但我现在还没有得到它.
我有关于在马里奥兄弟游戏中像海龟一样移动敌人的问题.
我正在使用像libgdx中的马里奥兄弟游戏这样的平台游戏.我制造地面,玩家在地面上移动,游戏装饰等......但我不知道如何使敌人移动.
什么时候敌人应该开始移动(渲染)?在一段时间延迟或当玩家接近敌人(宽度为1-2个屏幕)时,一直......
当我显示一个Dialog时
someDialog.show(someStage);
Run Code Online (Sandbox Code Playgroud)
该对话框显示默认的FadeIn操作.舞台也渐渐淡出.因此它使我的背景随着舞台逐渐消失.
我怎样才能防止这种情况发生?
编辑:这里是我的示例代码:
在屏幕显示方法中:
Texture bg = new Texture(Gdx.files.internal(src));
stage = new Stage(game.getViewport(), batch);
stage.addActor(someDialog) //just normal dialog
Run Code Online (Sandbox Code Playgroud)
渲染代码:
@Override
public void render(float delta) {
super.render(delta);
getBatch().begin();
getBatch().draw(backgroundTexture, 0, 0, width, height);
getBatch().end();
getStage().act(delta);
getStage().draw();
time += delta;
}
Run Code Online (Sandbox Code Playgroud)
我在某个事件触发时显示对话框:
dialog.show(getStage());
Run Code Online (Sandbox Code Playgroud)
我试图将null作为第二个参数放到show方法中
dialog.show(getStage(), null);
Run Code Online (Sandbox Code Playgroud)
并且使得舞台和对话框都不会淡入但是想要仅保留对话框的效果,或者至少不保留背景效果.
如果我使用的是 Handheld.Vibrate() 或者它是自动添加的,我是否必须添加 VIBRATE 权限?
如果我必须添加它,我该怎么做。如何编辑 AndroidManifest。这是在 Unity 中。
我正在使用libgdx来开发mygame.
我正在使用GestureListener来处理我的触摸事件.我的目标是当玩家在屏幕上触摸时让角色向右或向左移动.
问题是,GestureListener没有任何方法来处理这个问题.如果我正在使用平移,则播放器必须滑动才能触发该方法.此外,GestureListener没有touchUp方法,所以我无法组合touchDown和touchUp.
有没有办法做到这一点?