- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
使用 AndEngine for Android,我希望我的场景看起来像这样:
红色框是必须限制在给定大小的世界,比如 2000px*450px
。
蓝色框是Camera
,它也有限制(像往常一样),例如750px*450px
。
对于整个场景,我有一个恰好 450px
高的背景图像。所以我的 Camera
可以缩放到任何合适的大小,但背景必须完全适合高度。 Camera
的宽度可能是可变的。
玩家(圆圈)必须始终位于中心(水平),但不能离开世界边界。
为此,我尝试添加两种尺寸:
CAMERA_WIDTH
,CAMERA_HEIGHT
)WORLD_WIDTH
,WORLD_HEIGHT
)这个函数是为世界添加边界,以便物理引擎阻止玩家离开这些边界:
private void createWorldBoundaries() {
Body body;
final Rectangle wall_top = new Rectangle(0, WORLD_HEIGHT-5, WORLD_WIDTH, 10, mVertexManager);
final Rectangle wall_bottom = new Rectangle(0, 5, WORLD_WIDTH, 10, mVertexManager);
final Rectangle wall_left = new Rectangle(5, 0, 10, WORLD_HEIGHT, mVertexManager);
final Rectangle wall_right = new Rectangle(WORLD_WIDTH-5, 0, 10, WORLD_HEIGHT, mVertexManager);
body = PhysicsFactory.createBoxBody(mPhysicsWorld, wall_top, BodyType.StaticBody, new PhysicsFactory.createFixtureDef(0.0f, 0.5f, 0.5f));
wall_top.setUserData(body);
body = PhysicsFactory.createBoxBody(mPhysicsWorld, wall_bottom, BodyType.StaticBody, new PhysicsFactory.createFixtureDef(0.0f, 0.5f, 0.5f));
wall_bottom.setUserData(body);
body = PhysicsFactory.createBoxBody(mPhysicsWorld, wall_left, BodyType.StaticBody, new PhysicsFactory.createFixtureDef(0.0f, 0.5f, 0.5f));
wall_left.setUserData(body);
body = PhysicsFactory.createBoxBody(mPhysicsWorld, wall_right, BodyType.StaticBody, new PhysicsFactory.createFixtureDef(0.0f, 0.5f, 0.5f));
wall_right.setUserData(body);
attachChild(wall_top);
attachChild(wall_bottom);
attachChild(wall_left);
attachChild(wall_right);
}
但不幸的是,这不起作用。
(查看编辑)
设置相机追逐玩家对我来说是错误的结果:玩家确实一直停留在屏幕中央,但我希望玩家只在水平方向而不是垂直方向停留在屏幕中央。
我做错了什么,我可以改变什么?基本问题是:如何让世界比相机视野更宽,而高度等于相机视野。结果应该是你可以水平地穿过你的世界(移动相机)并且你总是可以看到完整的高度。
编辑:
当您定义Rectangle
的中心坐标而不是它的左上角时,您必须这样做,看起来:
final Rectangle wall_top = new Rectangle(WORLD_WIDTH/2, WORLD_HEIGHT-1, WORLD_WIDTH, 2, mVertexManager);
final Rectangle wall_bottom = new Rectangle(WORLD_WIDTH/2, FIELD_BASELINE_Y+1, WORLD_WIDTH, 2, mVertexManager);
final Rectangle wall_left = new Rectangle(1, WORLD_HEIGHT/2, 2, WORLD_HEIGHT, mVertexManager);
final Rectangle wall_right = new Rectangle(WORLD_WIDTH-1, WORLD_HEIGHT/2, 2, WORLD_HEIGHT, mVertexManager);
但是,我在几个教程中找到了其他解决方案。这些作者是否在编写教程之前没有测试他们的代码,或者行为是否从 GLES1 更改为 GLES2 或任何最新版本?
最佳答案
我认为你关于世界边界的问题是 self 回答的,不是吗?
物理世界边界
要进一步研究,您可以从 Play 商店下载 nicolas 的 AndEngine Examples App,并在此处查看不同的示例(GLES_2,尚未寻找 AnchorCenter):https://github.com/nicolasgramlich/AndEngineExamples/tree/GLES2/src/org/andengine/examples
取自 PhysicsExample,如果边界设置为相机边界,则矩形的代码应如下所示。在您的情况下,您可以根据需要扩展宽度(3 倍 CAMERA_WIDTH?)
final Rectangle ground = new Rectangle(0, CAMERA_HEIGHT - 2, WORLD_WIDTH, 2, vertexBufferObjectManager);
final Rectangle roof = new Rectangle(0, 0, WORLD_WIDTH, 2, vertexBufferObjectManager);
final Rectangle left = new Rectangle(0, 0, 2, CAMERA_HEIGHT, vertexBufferObjectManager);
final Rectangle right = new Rectangle(WORLD_WIDTH - 2, 0, 2, CAMERA_HEIGHT, vertexBufferObjectManager);
相机跟随玩家为了相机跟随你的玩家,你可以查找 BoundCameraExample 的代码 https://github.com/nicolasgramlich/AndEngineExamples/blob/GLES2/src/org/andengine/examples/BoundCameraExample.java
对你来说有趣的部分应该是底部的 addFace 方法
private void addFace(final float pX, final float pY) {
final FixtureDef objectFixtureDef = PhysicsFactory.createFixtureDef(1, 0.5f, 0.5f);
final AnimatedSprite face = new AnimatedSprite(pX, pY, this.mBoxFaceTextureRegion, this.getVertexBufferObjectManager()).animate(100);
final Body body = PhysicsFactory.createBoxBody(this.mPhysicsWorld, face, BodyType.DynamicBody, objectFixtureDef);
this.mScene.attachChild(face);
this.mPhysicsWorld.registerPhysicsConnector(new PhysicsConnector(face, body, true, true));
this.mBoundChaseCamera.setChaseEntity(face);
}
此方法为“您的玩家”(在本例中为方框脸)创建一个物理体 + Sprite ,并将 Sprite 设置为摄像机要跟随的追逐实体。由于相机有边界,它不能超过并且你的相机将有你的 PhysicWorld 边界的高度,你可以使用它让你的相机在 x 方向跟随玩家,而不是在 y 方向。
如果您(我不知道为什么)不想使用这些边界,您可以覆盖 Sprite 的 onUpdate 方法并仅在 x 方向而不是 xy 坐标上重新定位相机
face.registerUpdateHandler(new IUpdateHandler() {
@Override
public void onUpdate(final float pSecondsElapsed) {
float[] coord = face.getSceneCenterCoordinates();
this.mBoundChaseCamera.setCenter(sceneCenterCoordinates[0], CAMERA_Y_POSITION);
}
}
CAMERA_Y_POSITION
是带有 y 位置的静态最终字段。
我希望这能回答您的问题。 :-)
edit: 哎呀,我忘了说,如何实现相机绑定(bind),我将编辑上面的世界宽度:
this.mBoundChaseCamera.setBounds(0, 0,
WORLD_WIDTH, CAMERA_HEIGHT);
所有设置就像你给定的图像(除了脸部的确切位置,必须给 addFace(px, py)
)
编辑:Andengine GLES2 与 GLES2-AnchorCenter 场景边界之间的差异
据我了解这个问题,我认为您会使用 GLES2,我想到了 AndEngine 的(较旧的)默认 GLES2 分支并发布了边界。正如您之前发现并在评论中所述,您使用另一种方法来设置矩形 - 您需要将矩形中心设置为 pX 和 pY。这样做的原因实际上是,使用 AnchorCenter 分支,您将不再设置实体的左上角位置,而是使用它的中心位置。
关于android - 在 AndEngine 中使用相机追逐玩家并限制世界范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17496205/
我正在使用 andengine 开发游戏,我对加载屏幕感到震惊。每次按下我的菜单项时,加载下一个事件需要一些时间,同时出现黑屏,所以任何人都可以帮助我设置带有加载文本的屏幕而不是黑屏。 我搜索了一下,
您知道是否有任何教程或示例展示如何处理游戏的多个屏幕/场景? 例如,假设我有一个具有以下结构的游戏: 封面 主菜单 玩法 积分 将所有代码放在一个 java 文件中可能是一场噩梦......我想使用不
我是 AndEngine 的新手。从 a AndEngine Tutorial 工作时,未找到以下类。我尝试从 AndEngine 导入所有库,但仍未找到类。 类(class)是: SimpleLev
我对 andengine 非常陌生,尝试使用 git url 中的 andengine 示例:https://github.com/nicolasgramlich/AndEngineExamples
我希望在我的游戏中创建屏幕控件,但我不知道如何创建屏幕控件。 我的疑问是: 如何创建屏幕控件? 屏幕控件应该在我们的游戏项目中的什么位置实现? 屏幕控件的类型? 现在我正在创建这个游戏。我有一个球,但
所以,我正在研究 AndEnginePhysicsExample 代码。我想知道这个方法的含义是什么(http://pastebin.com/Day2hciB): private void addFa
我想从菜单开始游戏。在 Eclipse 中,我有 2 个项目,一个是菜单,另一个是实际的游戏。两者都使用 SimpleBaseGameActivity 作为基础。网上的例子做了如下所示的事情。特别是,
我创建这个池是为了回收和重用我添加到场景中的 Sprite 正如您将在我的代码中看到的,我创建了自己的获取方法,该方法随机化选择出现在场景中的 Sprite ,并随机化其 x 位置。问题是,它似乎出于
我的级别选择器出现问题。我正在使用我在该论坛的教程中找到的代码,但它无法正常工作。 事实是,当用户混合播放时,我正在使用两个场景,我将引擎设置为第二个场景,然后用户可以滚动级别。 然后,当用户按下后退
我有一个 GameScene,其中使用了 ZoomCamera、一个背景和一些“病毒”。问题是,当我放大或缩小背景时,背景也会缩放,我不希望这样,请帮忙。 http://puu.sh/9XPUl/c6
所以,这里的想法是收集三根日志,简单的任务。但我只能按特定顺序获取日志,否则触摸日志会使应用程序崩溃。为什么?如果我按顺序捕获它们,它就会起作用,但如果我先触摸日志 2 或 3,它就会崩溃。有更好的方
我正在学习如何使用 box2d 和 andEngine。我试图让我的 Sprite body 移动。我之前在 onCreateScene 中编写所有内容时就让它工作了,但现在我想为我的 Sprite
当用户在屏幕上交换手指时,我想显示一个三角形条。我不知道如何使用 AndEngine、使用粒子系统或使用 Sprite 或使用三角带算法... 我没有写任何代码,因为我很震惊该怎么做。我正在上传图片,
好吧,我正在提供这个变量来为 andengine 中的 sprite 表设置动画。 player.animate(new long[] { 100,100},0,2,false); 它采用的第一个
当在设备中加载时只有白色图像显示,当加载模拟器时图像被破坏 示例代码: // this.mCamera = new Camera(0, 0, 480,320); final Engine en
我开始在我的应用中使用 AndEngine。我使用了一个 xml 来定义应用程序的基本样式。我已经定义了一个场景,其中有一些可拖动的 Sprite 。 我已经正确导入了 xml,但场景出现在它上面,背
我试过这里的东西, http://www.andengine.org/forums/tutorials/getting-started-with-andengine-t11.html jar 文件 4
我仍在学习如何使用出色的 AndEngine 并进行了一些搜索,但我找不到如何创建像跳转到“超空间”这样的效果的示例。效果不必像在星球大战中看到的那样复杂,但可以像旧的 Windows“星星”屏幕保护
我使用的是Android 4.2.2。在我从 github 导入 andengine 并修复错误后,我制作了我的项目。之后我去了图书馆,添加了 andengine,一切都很好。 http://s29.
我在使用 ChangableText 时遇到问题,我正在使用它来显示当前分数。 但是它有问题,因为它在更新时速度很慢。但是,达到 90 分后,更新文本时不再有滞后......(只有前 9x10 分)
我是一名优秀的程序员,十分优秀!