- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 AndEngine 游戏开发(或一般游戏开发)的新手,我正在开发一款非常简单的游戏。设置是我在游戏中有4个主要 Sprite :
a.) 战斗机b.) 坦克c.) 步兵d.) 炸弹
游戏目前处于无限循环中。战斗机从左边出来,在屏幕上不断放大,每秒不断地从右边出来。坦克从屏幕左侧出来,开到屏幕中间,放下一些开到屏幕右侧的步兵。然后坦克将面向左并回到它来自的地方。
玩家可以点击屏幕发射一枚直下的炸弹。当它击中坦克或士兵时,炸弹会爆炸(留下爆炸 Sprite )并且炸弹以及它与之碰撞的物体(坦克或士兵)从场景中分离。
我的困境是,我似乎无法解决涉及碰撞的逻辑。我的意思是当然,我得到了这些功能,但我在逻辑上被难住了。这是游戏本身的快照:
这是我的代码 fragment (此函数是从 onCreateScene 更新处理程序调用的:
protected void checkTankCollision() {
// TODO Auto-generated method stub
int numCompares = bombGroup.getChildCount();
for (int i = 0; i < numCompares; i++) {
Sprite s = (Sprite) bombGroup.getChildByIndex(i);
for (int j = 0; j < numCompares; j++) {
Sprite s2 = (Sprite) tankGroup.getChildByIndex(j);
if (s.collidesWith(s2)) {
// boom
AnimatedSprite boom = createExplosion();
boom.setPosition(s.getX(), s.getY());
getEngine().getScene().attachChild(boom);
// WARNING: cannot detach from the list
// while looping through the list
final Sprite a = s;
final Sprite b = s2;
// this will do the action after the scene is done updating
getEngine().getScene().postRunnable(new Runnable() {
@Override
public void run() {
a.detachSelf();
b.detachSelf();
}
});
}
}
}
}
游戏部队在一些炸弹发射后关闭。它给出了 indexOutOfBoundsException 错误。
这是 logCat:
09-22 00:12:14.565: E/AndroidRuntime(924): FATAL EXCEPTION: UpdateThread
09-22 00:12:14.565: E/AndroidRuntime(924): java.lang.IndexOutOfBoundsException: Invalid index 1, size is 1
09-22 00:12:14.565: E/AndroidRuntime(924): at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:251)
09-22 00:12:14.565: E/AndroidRuntime(924): at java.util.ArrayList.get(ArrayList.java:304)
09-22 00:12:14.565: E/AndroidRuntime(924): at org.andengine.entity.Entity.getChildByIndex(Entity.java:612)
09-22 00:12:14.565: E/AndroidRuntime(924): at com.cs119.bombthetank2.BombTankActivity.checkTankCollision(BombTankActivity.java:660)
09-22 00:12:14.565: E/AndroidRuntime(924): at com.cs119.bombthetank2.BombTankActivity$4.onUpdate(BombTankActivity.java:194)
09-22 00:12:14.565: E/AndroidRuntime(924): at org.andengine.engine.handler.UpdateHandlerList.onUpdate(UpdateHandlerList.java:47)
09-22 00:12:14.565: E/AndroidRuntime(924): at org.andengine.entity.Entity.onManagedUpdate(Entity.java:1395)
09-22 00:12:14.565: E/AndroidRuntime(924): at org.andengine.entity.scene.Scene.onManagedUpdate(Scene.java:284)
09-22 00:12:14.565: E/AndroidRuntime(924): at org.andengine.entity.Entity.onUpdate(Entity.java:1167)
09-22 00:12:14.565: E/AndroidRuntime(924): at org.andengine.engine.Engine.onUpdateScene(Engine.java:591)
09-22 00:12:14.565: E/AndroidRuntime(924): at org.andengine.engine.Engine.onUpdate(Engine.java:586)
09-22 00:12:14.565: E/AndroidRuntime(924): at org.andengine.engine.Engine.onTickUpdate(Engine.java:548)
09-22 00:12:14.565: E/AndroidRuntime(924): at org.andengine.engine.Engine$UpdateThread.run(Engine.java:820)
实体和场景 Activity 是 AndEngine 的一部分,那里真的不可能有错误。 BombTheTank2 是我的 Activity 的名称,所以是的,错误就在那里。
最佳答案
在停止遍历子项列表之前,您似乎正在分离 Sprites。让我们以干净的方式来做。试试这个:
protected void checkTankCollision() {
int numCompares = bombGroup.getChildCount();
final ArrayList<Sprite> toBeDetached = new ArrayList<Sprite>();
for (int i = 0; i < numCompares; i++) {
Sprite s = (Sprite) bombGroup.getChildByIndex(i);
for (int j = 0; j < numCompares; j++) {
Sprite s2 = (Sprite) tankGroup.getChildByIndex(j);
if (s.collidesWith(s2)) {
// boom
AnimatedSprite boom = createExplosion();
boom.setPosition(s.getX(), s.getY());
getEngine().getScene().attachChild(boom);
// WARNING: cannot detach from the list
// while looping through the list
toBeDetached.add(s);
toBeDetached.add(s2);
}
}
}
runOnUpdateThread(new Runnable() {
@Override
public void run() {
for (Sprite s : toBeDetached) {
s.detachSelf();
}
toBeDetached.clear();
}
});
}
编辑:实际问题出在其他地方 - Erasmus 不小心迭代了 Tank 组和 Bomb 组相同的次数。解决方案是检查坦克数量并尽快停止迭代。
我个人总是使用 For-Each 循环,除非我真的需要知道索引,这让我省去了很多麻烦:-)
关于安卓和引擎 : Simple sprite collision,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12532918/
我想创建一个对象,比方说一个饼图。 class Pie def initialize(name, flavor) @name = name @flavor = flavor e
我正在寻找类似于 Log property in Linq DataContext 的功能. 最佳答案 所有执行的 SQL 都写入 Trace,因此您可以使用 TraceListener 访问。 关于
使用 django-simple-history ,如何从我的模型中获取最后更改的对象? 我尝试了 MyModel.history.most_recent(),它需要一个模型实例,因此可能会返回所选实
我定期使用 Eclipse 调试器,这一直困扰着我关于 IDE 的问题。步进过滤是一个非常宝贵的工具,这样我就不会进入没有源代码或者我根本不感兴趣的类。但是,Eclipse 在大多数情况下都没有正确处
我基于有向图构建一棵树。源数据是 SQL 表中的一系列父子关系。它肯定是一棵树(无论如何我都会验证)。我想要一组从根到每片叶子的简单路径。数据是会计“科目表”中的标题,路径类似于“根 -> Asset
我对如何在torii中使用ember-simple-auth有点困惑 我正在使用ember-cli-simple-auth和ember-cli-simple-auth-torii 我得到下面提到的错误
考虑以下用 simple-xml 注释注释的枚举: @Root(name="days") public enum DaysOfWeek { SUNDAY("blue", 30), MO
我有一个 json 文件,我正在 excel 中创建一些 vba 代码。我想用java读取这个json文件。为此,我编写了以下代码 try { Class.forName("org.j
我在尝试使用 google 的 simple-json 解析一个简单的 json 时遇到了一个奇怪的问题。 这是我的代码,它不起作用: String s = args[0].toString(); J
我正在尝试解析下面的 json 文件: {"units":[{"id":42, "title":"Hello World", "positi
我正在使用 simple-import-sort eslint 插件进行 react 。我想我的 .eslintrc.js是对的,但我无法使这个特定的插件工作。我在文件的第一行收到以下错误: 未找到规
我正在尝试解析子文件,但我不知道自己做错了什么(当然,我也不知道自己做对了什么)。 文件.json [{ "arrOne":{ "one":"a", "two":"b",
在我的Angel 16(独立的)应用程序中,我有一个简单的服务来测试LangChain和OpenAI。同样的代码在NodeJS应用程序中运行得非常好,然而,当从角度运行时,OpenAI返回的结果总是空
我正在尝试测试连接到数据库的 Web 应用程序 - 我的 Junit 代码不执行连接。 设置按照 https://github.com/h-thurow/Simple-JNDI InitialCont
我正在尝试制作一个小型应用程序,它可以通过 ISBN 在亚马逊上搜索一本书。我是 Amazon Web Service 的新手。 我正在关注以下链接: http://flyingpies.wordpr
我正在使用简单 XML 序列化 (simple-xml-2.6.6.jar) here将我的 XML 响应从 webservice 转换为 POJO 类。 XML 是:
Simple UI混合开发的必经之路~ Simple UI快速上手 在混合开发的模式下,如果想使用django admin,又嫌弃后台不符合你的审美?Simple UI给你想要的答案,我不是打广告的~
Simple JSON是Google开发的Java JSON解析框架,基于Apache协议。 下载的文件是:json_simple.jar 例子1:很方便的方式,使用JSONValue
我有一个 simple_form 表单设置,它会很好地显示内联错误。我遇到过一些用户看不到这些错误的问题,并要求在非常长的表格顶部进行清晰的枚举。我使用了 Rails 教程中的代码设置:
我正在使用简单的 XML 框架,只是重命名了一些 XML 布局,这些布局现在似乎不再起作用了。 这是我的 XML: 2 0 1
我是一名优秀的程序员,十分优秀!