【问题标题】:Android AndEngine problem with touch events触摸事件的Android AndEngine问题
【发布时间】:2011-05-14 08:47:54
【问题描述】:

我正在学习 andEngine 并尝试根据一些示例制作一个简单的游戏。我的问题是游戏在某些随机时刻停止,我只能使用返回按钮;/ 我使用 logcat 发现问题,这里是日志:

/释放键'

我/调试(2656):pid:4918,tid: 第4926章>>> 我/调试(2656):信号11 (SIGSEGV),代码 1 (SEGV_MAPERR),故障 地址 3f8191d 4 I/调试(2656):r0 00000000 r1 00000000 r2 3f800000 r3 000191d4 I/调试(2656):r4 00140a30 r5 00149978 r6 449d9b18 r7 44dbe008 I/调试(2656):R8 449d9b6c r9 43707d58 10 43707d40 fp 449d9ed8

I/调试 (2656): ip 00000000 sp 449d9b00 lr 8062eeb8 个人电脑 806189b8 cpsr 600 00010 I/AndEngine(4918): org.anddev.andengine.input.touch.TouchEvent$TouchEventPool 已用尽,有 3 个项目 尚未回收。再分配1个。 我/AndEngine(4918): org.anddev.andengine.util.pool.PoolUpdateHandler$1 已用尽,与 3 个项目尚未回收。已分配 1 更多的 。我/AndEngine(4918): org.anddev.andengine.input.touch.TouchEvent$TouchEventPool 已用尽,有 4 个项目 尚未回收。再分配1个。 我/AndEngine(4918): org.anddev.andengine.util.pool.PoolUpdateHandler$1 已用尽,与 4 件物品尚未回收。已分配 1 更多的 。我/AndEngine(4918): org.anddev.andengine.input.touch.TouchEvent$TouchEventPool 已用尽,有 5 个项目 尚未回收。再分配1个。 我/AndEngine(4918): org.anddev.andengine.util.pool.PoolUpdateHandler$1 已用尽,与 5 个项目尚未回收。已分配 1 更多的 。我/AndEngine(4918): org.anddev.andengine.input.touch.TouchEvent$TouchEventPool 已用尽,有 6 个项目 尚未回收。再分配1个。 我/AndEngine(4918): org.anddev.andengine.util.pool.PoolUpdateHandler$1 已用尽,与 6 件物品尚未回收。已分配 1 更多的 。我/AndEngine(4918): org.anddev.andengine.input.touch.TouchEvent$TouchEventPool 已用尽,有 7 个项目 尚未回收。再分配1个。 我/AndEngine(4918): org.anddev.andengine.util.pool.PoolUpdateHandler$1 已用尽,与 7 件物品尚未回收。已分配 1 更多的 。我/AndEngine(4918): org.anddev.andengine.input.touch.TouchEvent$TouchEventPool 已用尽,有 8 个项目 尚未回收。再分配1个。 我/AndEngine(4918): org.anddev.andengine.util.pool.PoolUpdateHandler$1 已用尽,与 8 件物品尚未回收。已分配 1 更多的 。我/AndEngine(4918): org.anddev.andengine.input.touch.TouchEvent$TouchEventPool 已用尽,有 9 个项目 尚未回收。再分配1个。 我/AndEngine(4918): org.anddev.andengine.util.pool.PoolUpdateHandler$1 已用尽,与 9 件物品尚未回收。已分配 1 更多的 。 D/dalvikvm(929):克罗诺斯 GC_EXTERNAL_ALLOC 释放 166K,释放 55% 2686K/5895K,外接905K/987K, 暂停 268 毫秒 I/AndEngine(4918): org.anddev.andengine.input.touch.TouchEvent$TouchEventPool 已用尽,有 10 个项目 尚未回收。再分配1个。 我/AndEngine(4918): org.anddev.andengine.util.pool.PoolUpdateHandler$1 已用尽,与 10 件物品尚未回收。已分配 1 更多的。我/AndEngine(4918): org.anddev.andengine.input.touch.TouchEvent$TouchEventPool 已用尽,有 11 项 尚未回收。再分配1个。 我/AndEngine(4918): org.anddev.andengine.util.pool.PoolUpdateHandler$1 已用尽,与 11 件物品尚未回收。已分配 1 更多的。我/AndEngine(4918): org.anddev.andengine.input.touch.TouchEvent$TouchEventPool 已用尽,有 12 项 尚未回收。再分配1个。 我/AndEngine(4918): org.anddev.andengine.util.pool.PoolUpdateHandler$1 已用尽,与 12 件物品尚未回收。已分配 1 更多的。我/AndEngine(4918): org.anddev.andengine.input.touch.TouchEvent$TouchEventPool 已用尽,有 13 个项目 尚未回收。再分配1个。 我/AndEngine(4918): org.anddev.andengine.util.pool.PoolUpdateHandler$1 已用尽,与 13 个项目尚未回收。已分配 1 更多的。我/AndEngine(4918): org.anddev.andengine.input.touch.TouchEvent$TouchEventPool 已用尽,有 14 个项目 尚未回收。再分配1个。 我/AndEngine(4918): org.anddev.andengine.util.pool.PoolUpdateHandler$1 已用尽,与 14 件物品尚未回收。已分配 1 更多的。我/AndEngine(4918): org.anddev.andengine.input.touch.TouchEvent$TouchEventPool 已用尽,有 15 个项目 尚未回收。再分配1个。 我/AndEngine(4918): org.anddev.andengine.util.pool.PoolUpdateHandler$1 已用尽,与 15 个项目尚未回收。已分配 1 更多的。我/AndEngine(4918): org.anddev.andengine.input.touch.TouchEvent$TouchEventPool 已用尽,有 16 个项目 尚未回收。再分配1个。 我/AndEngine(4918): org.anddev.andengine.util.pool.PoolUpdateHandler$1 已用尽,与 16 件物品尚未回收。已分配 1 更多的。我/AndEngine(4918): org.anddev.andengine.input.touch.TouchEvent$TouchEventPool 已用尽,有 17 项 尚未回收。再分配1个。 我/AndEngine(4918): org.anddev.andengine.util.pool.PoolUpdateHandler$1 已用尽,与 17 个项目尚未回收。已分配 1 更多的。我/AndEngine(4918): org.anddev.andengine.input.touch.TouchEvent$TouchEventPool 已用尽,有 18 个项目 尚未回收。再分配1个。 我/AndEngine(4918): org.anddev.andengine.util.pool.PoolUpdateHandler$1 已用尽,与 18 件物品尚未回收。已分配 1 更多的。我/AndEngine(4918): org.anddev.andengine.input.touch.TouchEvent$TouchEventPool 已用尽,有 19 个项目 尚未回收。再分配1个。 我/AndEngine(4918): org.anddev.andengine.util.pool.PoolUpdateHandler$1 已用尽,与 19 件物品尚未回收。已分配 1 更多的。我/AndEngine(4918): org.anddev.andengine.input.touch.TouchEvent$TouchEventPool 已用尽,有 20 个项目 尚未回收。再分配1个。 我/AndEngine(4918): org.anddev.andengine.util.pool.PoolUpdateHandler$1 已用尽,与 20 件物品尚未回收。已分配 1 更多的。我/AndEngine(4918): org.anddev.andengine.input.touch.TouchEvent$TouchEventPool 已用尽,有 21 项 尚未回收。再分配1个。 我/AndEngine(4918): org.anddev.andengine.util.pool.PoolUpdateHandler$1 已用尽,与 21 件物品尚未回收。已分配 1 更多的。我/AndEngine(4918): org.anddev.andengine.input.touch.TouchEvent$TouchEventPool 已用尽,有 22 项 尚未回收。再分配1个。 我/AndEngine(4918): org.anddev.andengine.util.pool.PoolUpdateHandler$1 已用尽,与 22 项尚未回收。已分配 1 更多的。我/AndEngine(4918): org.anddev.andengine.input.touch.TouchEvent$TouchEventPool 已用尽,有 23 项 尚未回收。再分配1个。 我/AndEngine(4918): org.anddev.andengine.util.pool.PoolUpdateHandler$1 已用尽,与 23 项尚未回收。已分配 1 更多的。我/AndEngine(4918): org.anddev.andengine.input.touch.TouchEvent$TouchEventPool 已用尽,有 24 项 尚未回收。再分配1个。 我/AndEngine(4918): org.anddev.andengine.util.pool.PoolUpdateHandler$1 已用尽,与 24 件物品尚未回收。已分配 1 更多的。我/AndEngine(4918): org.anddev.andengine.input.touch.TouchEvent$TouchEventPool 已用尽,有 25 个项目 尚未回收。再分配1个。 我/AndEngine(4918): org.anddev.andengine.util.pool.PoolUpdateHandler$1 已用尽,与 25 件物品尚未回收。已分配 1 更多的。我/AndEngine(4918): org.anddev.andengine.input.touch.TouchEvent$TouchEventPool 已用尽,有 26 项 尚未回收。再分配1个。 我/AndEngine(4918): org.anddev.andengine.util.pool.PoolUpdateHandler$1 已用尽,与 26 项尚未回收。已分配 1 更多的。我/AndEngine(4918): org.anddev.andengine.input.touch.TouchEvent$TouchEventPool 已用尽,有 27 个项目 尚未回收。再分配1个。 我/AndEngine(4918): org.anddev.andengine.util.pool.PoolUpdateHandler$1 已用尽,与 27 项尚未回收。已分配 1 更多的。 D/dalvikvm(929):克罗诺斯 GC_EXTERNAL_ALLOC 释放 10K,释放 55% 2686K/5895K,外接905K/927K, 暂停 294 毫秒 D/dalvikvm(929):Cronos GC_EXTERNAL_ALLOC 释放 5K,释放 55% 2686K/5895K,外接 920K/1016K, 暂停 135 毫秒 I/DEBUG(2656):

00 pc 000189b8 /data/data/com.homework.mygame/lib

/libandenginephysicsbox2dextension.so (_ZN6b2Body13CreateFixtureEPK12b2FixtureDe f) I/DEBUG (2656): #01 pc 0000英国广播公司 /data/data/com.homework.mygame/lib /libandenginephysicsbox2dextension.so (Java_com_badlogic_gdx_physics_box2d_Body_ jniCreateFixture__JJFFFZSSS) I/DEBUG
(2656):#02 个人电脑 00011d74 /system/lib/libdvm.so I/DEBUG ( 2656): I/DEBUG (2656): 代码 电脑:我/调试(2656):80618998 eb00595d e3500000 0a000001 e1a00004 我/调试(2656):806189a8 ebfffd9f e594205c e3a03a19 e2833f75 I/DEBUG ( 2656): 806189b8 e7921003 e1a00005 e3811001 e7821003 I/调试(2656): 806189c8 e8bd81f0 e594105c e1a00005 e284200c I/调试(2656):806189d8 e2811a19 e2811f76 eb0003ae eaffffe2 我/调试(2656): 我/调试(2656): lr 周围的代码:I/DEBUG(2656): 8062ee98 e51d0004 e12fff1e e1a0c000 e1a00001 I/调试(2656):8062eea8 e1a0100c eaffffff e92d400f ebffffe1 我/调试(2656):8062eeb8 e3500000 43700000 e8bd800f e52de008 I/DEBUG ( 2656): 8062eec8 ebfffff8 03a00001 13a00000 e49df008 I/调试(2656): 8062eed8 e52de008 ebfffff3 33a00001 23a00000 I/DEBUG (2656): I/DEBUG
(2656):堆栈:I/DEBUG(2656):
449d9ac0 43707d58 I/调试(2656): 449d9ac4 43707d40 I/调试(2656): 449d9ac8 449d9ed8 I/调试(2656): 449d9acc 80617174 /data/data/com.homework.mygame/lib/li bandenginephysicsbox2dextension.so 我/调试(2656):449d9ad0 00149978 I/DEBUG (2656):
449d9ad4 449d9b18 I/调试(2656): 449d9ad8 0000ffff I/调试(2656): 449d9adc 44dbe008 I/调试(2656): 449d9ae0 00000001 I/调试(2656): 449d9ae4 00000000 I/调试(2656): 449d9ae8 00000000 I/调试(2656): 449d9aec 421cf249 I/调试(2656): 449d9af0 bf800001 I/调试(2656): 449d9af4 8062ef1c /data/data/com.homework.mygame/lib/li bandenginephysicsbox2dextension.so 我/调试(2656):449d9af8 df002777 I/调试 (2656):
449d9afc e3a070ad I/DEBUG(2656):

00 449d9b00 ffffffff I/DEBUG (2656): 449d9b04 00000000 I/DEBUG

(2656):449d9b08 80632718 我/调试(2656):449d9b0c 43707d84 I/调试(2656):
449d9b10 449d9b6c I/调试(2656): 449d9b14 8060bfc0 /data/data/com.homework.mygame/lib/li bandenginephysicsbox2dextension.so 我/调试(2656):#01 449d9b18 80632718 I/DEBUG (2656):
449d9b1c 0016a928 I/调试(2656): 449d9b20 00000000 I/调试(2656): 449d9b24 00000000 I/调试(2656): 449d9b28 00000000 I/调试(2656): 449d9b2c 00000000 I/调试(2656): 449d9b30 00017b00 I/调试(2656): 449d9b34 0000ffff I/调试(2656): 449d9b38 449d9b90 I/调试(2656): 449d9b3c 00000003 I/调试(2656): 449d9b40 44843052 I/调试(2656): 449d9b44 aca11d78 /system/lib/libdvm.so I/AndEngine( 4918): org.anddev.andengine.input.touch.TouchEvent$TouchEventPool 已用尽,有 28 项 尚未回收。再分配1个。 我/AndEngine(4918): org.anddev.andengine.util.pool.PoolUpdateHandler$1 已用尽,与 28 件物品尚未回收。已分配 1 更多的。我/AndEngine(4918): org.anddev.andengine.input.touch.TouchEvent$TouchEventPool 已用尽,有 29 个项目 尚未回收。再分配1个。 D/dalvikvm(602):克罗诺斯 GC_EXTERNAL_ALLOC 释放 257K,释放 40% 6266K/10311K,外接 1546K/1581K, 暂停 445 毫秒 I/AndEngine(4918): org.anddev.andengine.util.pool.PoolUpdateHandler$1 已用尽,与 29 件物品尚未回收。已分配 1 更多的。我/AndEngine(4918): org.anddev.andengine.input.touch.TouchEvent$TouchEventPool 已用尽,有 30 个项目 尚未回收。再分配1个。 我/AndEngine(4918): org.anddev.andengine.util.pool.PoolUpdateHandler$1 已用尽,与 30 件物品尚未回收。已分配 1 更多的。我/AndEngine(4918): org.anddev.andengine.input.touch.TouchEvent$TouchEventPool 已用尽,有 31 项 尚未回收。再分配1个。 我/AndEngine(4918): org.anddev.andengine.util.pool.PoolUpdateHandler$1 已用尽,与 31 件物品尚未回收。已分配 1 更多的。我/AndEngine(4918): org.anddev.andengine.input.touch.TouchEvent$TouchEventPool 已用尽,有 32 项 尚未回收。再分配1个。 我/AndEngine(4918): org.anddev.andengine.util.pool.PoolUpdateHandler$1 已用尽,与 32 件物品尚未回收。已分配 1 更多的。 D/dalvikvm(929):克罗诺斯 GC_EXTERNAL_ALLOC 释放 11K,释放 55% 2685K/5895K,外接726K/889K, 暂停 139 毫秒 D/dalvikvm(929):Cronos GC_EXTERNAL_ALLOC 释放 10K,释放 55% 2686K/5895K,外接667K/749K, 暂停 140 毫秒 D/dalvikvm(929):Cronos GC_EXTERNAL_ALLOC 释放 5K,释放 55% 2685K/5895K,外接 920K/1016K, 暂停 138 毫秒 D/dalvikvm(602):Cronos GC_EXTERNAL_ALLOC 释放 32K,释放 40% 6246K/10311K,外接1403K/1470K, 暂停 343 毫秒 I/BootReceiver(602): 复制 /data/tombstones/tombstone_02 到 DropBox (SYSTEM_TOMBSTONE) E/InputDispatcher(602):通道 '408f3600 com.homework.mygame/com.homework.myg ame.com.homework.mygame(服务器)'~ 消费者关闭输入通道或 错误发生。事件=0x8 E/InputDispatcher(602):通道 '408f3600 com.homework.mygame/com.homework.myg ame.com.homework.mygame(服务器)'~ 通道被不可恢复地破坏并且 将被处置! D/合子(565): 进程 4918 由信号 (11) 终止 D/dalvikvm(602):克罗诺斯 GC_FOR_MALLOC 释放 123K,释放 39% 6384K/10311K,外接 958K/1470K, 暂停 141 毫秒 I/dalvikvm 堆(602): 将堆(碎片案例)增加到 9.928MB 161568 字节分配 D/dalvikvm( 602): Cronos GC_FOR_MALLOC 释放 3K, 38% 免费 6538K/10503K,外置 958K/1470K,暂停147ms I/WindowManager(602):赢得死亡: 窗口{408f3600 com.homework.mygame/com.homew ork.mygame.com.homework.mygame 暂停=假} D/dalvikvm(602): Cronos GC_FOR_MALLOC 释放 2K,38% 免费 6537K/10503K,外接 847K/1359K,暂停143ms I/dalvikvm-heap(602): 增长堆 (碎片案例)到 9.891MB 为 80792 字节 分配 D/dalvikvm(602):Cronos GC_FOR_MALLOC 释放

所以我猜这是因为 onAreaTouched 函数。我用它来控制一个玩家,有2个箭头,我们可以触摸它们来从左到右移动玩家。我做得对还是应该以其他方式做?这是我的代码:

 mRArrow = new Sprite(125, CAMERA_HEIGHT - 55, mRArrowTextureRegion) {
                @Override
                protected void onManagedUpdate(float pSecondsElapsed) {

                    super.onManagedUpdate(pSecondsElapsed);
                }

                @Override
                public boolean onAreaTouched(TouchEvent pSceneTouchEvent,
                        float pTouchAreaLocalX, float pTouchAreaLocalY) {


                    Body playerBody = mPhysicsWorld.getPhysicsConnectorManager()
                        .findBodyByShape(mPlayer);

                    playerBody.setTransform(new Vector2((playerBody.getPosition().x + 0.15f) ,playerBody.getPosition().y), 0);

                    return true;
                }
             };

            mLArrow = new Sprite(15, CAMERA_HEIGHT - 55, mLArrowTextureRegion) {
                @Override
                protected void onManagedUpdate(float pSecondsElapsed) {

                    super.onManagedUpdate(pSecondsElapsed);
                }

                @Override
                public boolean onAreaTouched(TouchEvent pSceneTouchEvent,
                        float pTouchAreaLocalX, float pTouchAreaLocalY) {

                    Body playerBody = mPhysicsWorld.getPhysicsConnectorManager()
                    .findBodyByShape(mPlayer);

                    playerBody.setTransform(new Vector2((playerBody.getPosition().x - 0.15f) ,playerBody.getPosition().y), 0);

                    return true;
                }
             };

提前致谢

格雷格

【问题讨论】:

    标签: android andengine touch-event


    【解决方案1】:

    不要触摸 TouchEvent 中的物理“Body”。 UI-Thread 和 UpdateThread 讨厌同时工作!

    【讨论】:

    • 我正在检查 IUpdateHandler onUpdate( ) 上的碰撞,只是添加了一些对象,它分配了 183 个触摸事件和我的游戏滞后。
    • 那么,我们如何使用物理体(在我的例子中,是一个数字“操纵杆”控件)?我必须触摸它才能移动精灵。
    • @Nicolas Gramlich 好吧,我只是接管了 AndEngine。我也考虑了同样的问题。也许有一天它应该在核心中修复。
    【解决方案2】:

    我遇到了同样的错误,这是因为我没有调用 scene.registerTouchArea(...)。 希望这对某人有所帮助。

    【讨论】:

      【解决方案3】:

      在我的情况下,当我尝试使用时出现了问题

      physicsWorld.destroyBody(fixture.getBody());
      

      我避开了这条线,场景效果很好。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多