2013-01-27 34 views
6

tôi đang tạo ra một trò chơi trong đó sử dụng andendgine và đây là mã của tôi:nhân vật không bao giờ dừng lại từ bước

Player stanley = new Player(); 
... 

scene.registerUpdateHandler(new IUpdateHandler() { 
    public void onUpdate(float pSecondsElapsed) { 

    stanX = stanley.getX(); 
    destX = x.getX(); 

    if(destX < stanX){ 
    if(hasMovedRight == 1){ 
     stanley.stop(); 
     hasMovedRight = 0; 
    } 
    else{ 
     stanley.moveLeft(); 
     hasMovedRight = 0 
     hasMovedLeft = 1; 
    } 
    } 

    if(destX > stanX){ 
    if(hasMovedLeft == 1){ 
     stanley.stop(); 
     hasMovedLeft == 0; 
    } 
    else{ 
     stanley.moveRight(); 
     hasMovedLeft = 0; 
     hasMovedRight = 1; 
    } 
    } 
} 
} 

những gì tôi muốn là để ngăn chặn Player từ đi bộ bất cứ khi nào vị trí X của ông là bằng diện tích chạm X. Vấn đề là nó không bao giờ ngừng đi bộ. Cảm ơn!

+0

Cậu cố gắng để gỡ lỗi mã của bạn để xem nơi nó đi sai? – Egor

Trả lời

0

thử này một

setOnSceneTouchListener(new IOnSceneTouchListener() { 
@Override 
    public boolean onSceneTouchEvent(Scene scene, TouchEvent event) { 
    int touchX = (int) (event.getX() - (sCHARStanley.getWidth()/2)); 

    //so that your sprite will go to the touched part of the screen 
} 
5

Câu lệnh if của bạn thiếu phần tử trong đó destX == stanX. và bạn thực sự nên sử dụng khác nếu. Xem mã đã sửa đổi bên dưới.

if(destX + 8 < stanX){ 
    if(hasMovedRight == 1){ 
     stanley.stop(); 
     hasMovedRight = 0; 
    } 
    else{ 
     stanley.moveLeft(); 
     hasMovedRight = 0 
     hasMovedLeft = 1; 
    } 
    } 
    else if(destX - 8 > stanX){ 
    if(hasMovedLeft == 1){ 
     stanley.stop(); 
     hasMovedLeft == 0; 
    } 
    else{ 
     stanley.moveRight(); 
     hasMovedLeft = 0; 
     hasMovedRight = 1; 
    } 
    } 
    else //makes stanley stop. (calls stop method), if at touched x. 
    { 
     stanley.stop(); 
     hasMovedRight = 0; 
     hasMovedLeft = 0; 
    } 
+0

Đó là một trong những vấn đề của tôi. TouchX và StanX chưa bao giờ bằng nhau. Tôi đã thử xem logcat để gỡ lỗi nhưng nó cho thấy một khoảng thời gian 7 để thay thế. Giống như: StanX: 24 TouchX: 30 StanX: 31 TouchX: 30 StanX: 38 TouchX: 30 –

+0

@NobodyWantsĐể bạn tăng StanX theo bội số của một cái gì đó thay vì 1 tại một thời điểm. Trong trường hợp đó, hãy thay đổi câu lệnh if để kiểm tra phạm vi. Xem mã đã sửa đổi. – Doomsknight

+0

Woops, có nó sai cách xung quanh .. xem bây giờ. Về cơ bản kiểm tra của nó trong vòng 8 (hoặc giá trị bao giờ) của touchX. thay vì chính xác bằng – Doomsknight

Các vấn đề liên quan