2011-12-15 13 views
1

AndEngineのChangeableTextに少し問題があります。画面をフリーズすることなくテキストを更新する方法を知りたいですか?今の私は、この方法を使用していますが、多分2~3秒間自分の携帯電話を凍結ます:Android AndEngine - ChangeableTextの値を更新する方法

private void removeFace(final Sprite face) { 

     hm = getIconNames(); 
     if(face.getUserData().equals("petrol")){ 

      elapsedText.setText(hm.get(25));   

      final PhysicsConnector facePhysicsConnector = this.mPhysicsWorld.getPhysicsConnectorManager().findPhysicsConnectorByShape(face); 

      this.mPhysicsWorld.unregisterPhysicsConnector(facePhysicsConnector); 
      this.mPhysicsWorld.destroyBody(facePhysicsConnector.getBody()); 
      this.mScene.unregisterTouchArea(face); 
      this.mScene.detachChild(face); 

     } else { 

     } 

     System.gc(); 
} 

任意のアイデアはどのようにそれを行うには?

答えて

0

おそらく、テキストの設定中に情報を取得している可能性があります。あなたは何をすべき

は、その後、あなたの

String hm = hm.get(25); //What ever the correct object is or variable. im guessing its a string or int. 

が設定される変更可能なテキストに渡します、です。長く取る可能性があり、ここで

elapsedText.setText(hm); //If its a int make sure you do String.valueOf(hm); 
0

唯一の3つの方法は、getIconNames()get()あり、そしてSystem.gc()

他の人は通常、すぐに返すメソッドであるか、あるいは非常に低い複雑さを持っています。たとえば、getPhysicsConnectorManager()はすぐに戻ります。 findPhysicsConnectorByShape,unregisterPhysicsConnector,unregisterTouchAreaおよびdetachChildはすべてO(n)の複雑さを有する(他の多くの方法もO(1)またはO(n)の複雑さを有する)。

私はあなたがLogCatに見てお勧めしますとSystem.gc()が呼び出されたとき、あなたはGC_EXPLICITで始まりますし、あなたにガベージコレクションをした時間の長さに関するいくつかの情報を提供しますdalvikvmのタグのLog.i(青)のメッセージが表示されます。

GCコールに時間がかかっていない場合は、2つの方法、getIconNames()およびhm.get()でなければなりません。各コード行の後にLog.dメッセージを置くと、実行された最後のコード行が書き込まれます。あなたは時間を追うことができるこの方法。

1

detachChildを実行すると、エラーが発生する可能性があるため、スレッドでこれを行う必要があることに注意してください。あなたがお使いの携帯電話が

private void removeFace(final Sprite face) { 
     runOnUpdateThread(new Runnable(){ 
       @Override 
       public void run() { 
       hm = getIconNames(); 
       if(face.getUserData().equals("petrol")){ 

        elapsedText.setText(hm.get(25));   

        final PhysicsConnector facePhysicsConnector = this.mPhysicsWorld.getPhysicsConnectorManager().findPhysicsConnectorByShape(face); 

        this.mPhysicsWorld.unregisterPhysicsConnector(facePhysicsConnector); 
        this.mPhysicsWorld.destroyBody(facePhysicsConnector.getBody()); 
        this.mScene.unregisterTouchArea(face); 
        this.mScene.detachChild(face); 

       } else { 

       } 

       System.gc(); 
       }}); 


    } 
をFREEZべきではありませんしたい場合は、そこにすべてのコードを置くことができ

runOnUpdateThread(new Runnable(){ 

      @Override 
      public void run() { 
       if(yourSprite.hasParent()) 
        scene.detachChild(yourSprite); 
      }}); 

この構成を使用します

関連する問題