2013-09-27 6 views
0

나는 andengine 신청에 종사하고있다. 이것은 사용자가 작은 사각형을 사용하여 원을 그릴 때 Sprite를 삽입하는 것입니다. 저는 루프에 의해 많은 사각형을 만들고 원의 경로에 정렬합니다. 그래서 원처럼 보입니다. 하지만 문제는 화면이 천천히 반응하고 교수형처럼 보이는 것입니다. 아무도 내가 더 부드럽게 할 수있는 방법을 제안 할 수는 없습니다 .. 여기 내 코드가 있습니다.안드로이드 andengine 장면이 많은 아이가 그것에 첨부하면 천천히?

// 변수

private static final FixtureDef FIXTURE_DEF = PhysicsFactory.createFixtureDef(1, 0.5f, 0.5f); 


    private BitmapTextureAtlas mBitmapTextureAtlas; 

    private TiledTextureRegion mBoxFaceTextureRegion; 

    private Scene mScene; 

    private PhysicsWorld mPhysicsWorld; 

// 장면 방법

@Override 
    public Scene onCreateScene() { 
     this.mEngine.registerUpdateHandler(new FPSLogger()); 

     this.mScene = new Scene(); 
     this.mScene.setBackground(new Background(0, 0, 0)); 
     this.mScene.setOnSceneTouchListener(this); 

     this.mPhysicsWorld = new PhysicsWorld(new Vector2(0, SensorManager.GRAVITY_EARTH), false); 

     final VertexBufferObjectManager vertexBufferObjectManager = this.getVertexBufferObjectManager(); 
     final Rectangle ground = new Rectangle(0, CAMERA_HEIGHT - 2, CAMERA_WIDTH, 2, vertexBufferObjectManager); 
     final Rectangle roof = new Rectangle(0, 0, CAMERA_WIDTH, 2, vertexBufferObjectManager); 
     final Rectangle left = new Rectangle(0, 0, 2, CAMERA_HEIGHT, vertexBufferObjectManager); 
     final Rectangle right = new Rectangle(CAMERA_WIDTH - 2, 0, 2, CAMERA_HEIGHT, vertexBufferObjectManager); 

     final FixtureDef wallFixtureDef = PhysicsFactory.createFixtureDef(0, 0.5f, 0.5f); 
     PhysicsFactory.createBoxBody(this.mPhysicsWorld, ground, BodyType.StaticBody, wallFixtureDef); 
     PhysicsFactory.createBoxBody(this.mPhysicsWorld, roof, BodyType.StaticBody, wallFixtureDef); 
     PhysicsFactory.createBoxBody(this.mPhysicsWorld, left, BodyType.StaticBody, wallFixtureDef); 
     PhysicsFactory.createBoxBody(this.mPhysicsWorld, right, BodyType.StaticBody, wallFixtureDef); 

     this.mScene.attachChild(ground); 
     this.mScene.attachChild(roof); 
     this.mScene.attachChild(left); 
     this.mScene.attachChild(right); 
     drawLine(); 
     this.mScene.registerUpdateHandler(this.mPhysicsWorld); 

     return this.mScene; 
    } 

// drawline 방법에있어서 :

private void drawLine() { 


     float x1,y1,x2=1,y2=1; 
     float r=100; 
     float xCenter=300,yCenter=300; 
     Rectangle rectTest; 

     for(double i=0;i<5;i+=.01){ 
       x1 = (float) (xCenter + r * Math.cos(i)); 
       y1 = (float) (yCenter + r * Math.sin(i)); 

       System.out.println("RECT x1="+x1); 
       System.out.println("RECT y1="+y1); 
       System.out.println("RECT x2="+x2); 
       System.out.println("RECT y3="+y2); 

      rectTest = new Rectangle(x1,y1,1,1,getVertexBufferObjectManager()); 

      rectTest.setColor(Color.RED); 
      FixtureDef wallFixtureDef = PhysicsFactory.createFixtureDef(0, 
        0.1f, 0.1f); 
      PhysicsFactory.createBoxBody(this.mPhysicsWorld, rectTest, 
        BodyType.StaticBody, wallFixtureDef); 
      this.mScene.attachChild(rectTest); 

     } 
} 

답변

1

문제는 당신이 500 동적 몸 개체를 만드는 것을 아마 Box2D를 사용합니다. Box2D 또는 모든 물리 엔진은 모바일 플랫폼에서 상대적으로 비용이 많이 든다. 500 대의 충돌 본체를 시뮬레이션하면 모바일 프로세서가 처리 할 수있는 한계를 뛰어 넘습니다. 서클을 정의하려면 50 개 이하의 개체를 사용해보세요.

+0

귀하의 빠른 응답을 위해 Sturgeon에게 감사드립니다. 사실 나는 원형을 그리고 충돌 및 벽 속성 (직사각형과 같은)을 감지 할 수있는 기능을 갖추고 있습니다. 그래서 나는 원의 벽과 공의 충돌을 감지 할 수 있습니다. 그래서 사각형을 사용하여 원을 그리기로 결정했습니다. 동일한 작업을 수행 할 수있는 방법이 있습니다. 제발 제안하십시오. 나는 붙어있다. – puneetbhardwaj

+0

당신의 설명에서 당신이 무엇을하려고하는지 정확히 모르겠다.하지만 나는 2 가지를 제안 할 것이다 : 1 - 당신이 사용할 수있는 Box2D에 원 모양이있다. 2 : PHYSICS EDITOR 프로그램이라는 프로그램을 사용하여 png 이미지에서 box2d 프로젝트의 모든 모양 폴리곤을 생성 할 수 있습니다.이 프로젝트를 내 프로젝트에 사용하고 적극 추천합니다. http://www.codeandweb.com/physicseditor –

+0

우분투에서 사용할 수 있습니까 ?? – puneetbhardwaj