- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 onSceneTouchEvent 在 TMX map 上移动玩家:
@Override
public Scene onCreateScene() {
...
mScene.setOnSceneTouchListener(this);
}
...
@Override
public boolean onSceneTouchEvent(Scene pScene, final TouchEvent pSceneTouchEvent) {
switch(pSceneTouchEvent.getAction()) {
case TouchEvent.ACTION_DOWN:
mLastMotionX = pSceneTouchEvent.getX();
mLastMotionY = pSceneTouchEvent.getY();
break;
case TouchEvent.ACTION_MOVE:
mLastMotionX1 = pSceneTouchEvent.getX();
mLastMotionY1 = pSceneTouchEvent.getY();
SpeedVector(mLastMotionX, mLastMotionY, mLastMotionX1,
mLastMotionY1);
break;
case TouchEvent.ACTION_UP:
mLastMotionX2 = pSceneTouchEvent.getX();
mLastMotionY2 = pSceneTouchEvent.getY();
SpeedVectorStop(mLastMotionX, mLastMotionY, mLastMotionX2,
mLastMotionY2);
break;
}
return false;
}
...
public void SpeedVector(float x1, float y1, float x2, float y2) {
if ((Math.abs(x2 - x1) < 55) && (Math.abs(y2 - y1) < 55)) {
float r = (float) Math.sqrt(((x2 - x1) * (x2 - x1))
+ ((y2 - y1) * (y2 - y1)));
float rx = (x2 - x1) / r;
float ry = (y2 - y1) / r;
new Vector2(rx * 100, ry * 100);
new Vector2(x2, y2);
if (speedThread) {
mPlayerBody.setLinearVelocity(rx * 15, ry * 15);
} else
mPlayerBody.setLinearVelocity(rx * 5, ry * 5);
}
}
public void SpeedVectorStop(float x1, float y1, float x2, float y2) {
if ((Math.abs(x2 - x1) < 10) && (Math.abs(y2 - y1) < 10)) {
mPlayerBody.setLinearVelocity(0, 0);
}
}
场景中还有许多追逐玩家(简单 AI)的其他 Sprite (敌人)。它们的位置和速度会根据与玩家的距离而变化。因此,所有数据都在下一个方法中更新:
@Override
public final void onUpdate(final float pSecondsElapsed) {
//some code
}
当我触及场景几次时 - AndEngine 会崩溃这是一个 LogCat:
05-05 17:13:06.539: V/AndEngine(2676): org.andengine.input.touch.TouchEvent$TouchEventPool was exhausted, with 2 item not yet recycled. Allocated 1 more. 05-05 17:13:06.539: V/AndEngine(2676): org.andengine.util.adt.pool.PoolUpdateHandler$1 was exhausted, with 2 item not yet recycled. Allocated 1 more. 05-05 17:13:06.559: V/AndEngine(2676): org.andengine.input.touch.TouchEvent$TouchEventPool was exhausted, with 3 item not yet recycled. Allocated 1 more. 05-05 17:13:06.559: V/AndEngine(2676): org.andengine.util.adt.pool.PoolUpdateHandler$1 was exhausted, with 3 item not yet recycled. Allocated 1 more. 05-05 17:13:06.579: V/AndEngine(2676): org.andengine.input.touch.TouchEvent$TouchEventPool was exhausted, with 4 item not yet recycled. Allocated 1 more. 05-05 17:13:06.579: V/AndEngine(2676): org.andengine.util.adt.pool.PoolUpdateHandler$1 was exhausted, with 4 item not yet recycled. Allocated 1 more.
and etc.
有人遇到过这个问题吗?
问题很紧急,目前还没有解决办法(
最佳答案
您的消息由作为私有(private)静态成员包含在 TouchEvent 类中的 TouchEventPool 生成。
此日志调用由 GenericPool<T>
中的第 136 行生成类,但这不是问题,实际上我在我的应用程序中也收到了它们。
只是通知引擎将分配一个额外的 touchEvent,因为它们被重用了。
您可以通过在 TouchEventPool 中调用正确的构造函数来增加起始池,public GenericPool(final int pInitialSize)
构造函数,或通过公开 public synchronized void batchAllocatePoolItems(final int pCount)
,总是在 TouchEventPool 中,然后在您的应用程序中使用正确的参数调用它。
顺便说一下,除非您正在存储 TouchEvent(您真的不应该存储!!如果您需要它,请复制它!),这是一条不会使您的应用程序崩溃的信息消息。
关于java - GLES2 TouchEventPool 耗尽,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16388549/
我正在使用 onSceneTouchEvent 在 TMX map 上移动玩家: @Override public Scene onCreateScene() { ...
我正在使用 andengine 开发一款安卓游戏。基本上,我使用 2 个 ArrayList 来存储我的 2 种类型的 Sprite 。我在运行时添加和删除两种类型的 Sprite,以响应用户交互。但
我是一名优秀的程序员,十分优秀!