2012-03-29 51 views
5

Tôi đang làm việc trên một trò chơi mà nhiều người chơi có thể chơi cùng một lúc. Đó là trò chơi 2D và tất cả các nhân vật sẽ có thể nhìn thấy nhau di chuyển trên màn hình. Giống như trò chơi bây giờ tất cả các thiết bị chỉ đăng và tìm nạp lẫn nhau coordinates đến một máy chủ. Này được thực hiện bằng cách chạy đến chủ đề:Lập trình trò chơi nhiều người chơi

public void StartCoordinatorFetcherThread(final Sprite Object) 
{ 
    Thread CoordinateStarter = new Thread() 
    { 
     public void run() 
     {   
      while(true) 
      { 
       Object.testing = Object.InternetObject.GetMessages(); 
       try { 
        Thread.sleep(20); 
       } catch (InterruptedException e) { 
        e.printStackTrace(); 
       } 
      } 
     } 
    }; 
    CoordinateStarter.start(); 
} 

public void StartCoordinatorPosterThread(final Sprite Object) 
{ 
    Thread CoordinatePoster = new Thread() 
    { 
     public void run() 
     {   
      while(true) 
      { 
       Object.InternetObject.PostCoordinates(Object.x,Object.y); 
       try { 
        Thread.sleep(20); 
       } catch (InterruptedException e) { 
        e.printStackTrace(); 
       } 
      } 
     } 
    }; 
    CoordinatePoster.start(); 
} 

Dù sao, tôi muốn các nhân vật di chuyển trơn tru hơn vì nó có thể là một chút "laggy" làm việc đó như this.Does ai có một ý tưởng về làm thế nào tôi có thể đạt được mục tiêu này ?

Có lẽ tôi nên có một loại ngăn xếp tọa độ mà chỉ được đẩy tọa độ đến mọi lúc và sau đó bật các giá trị khi trò chơi chạy?

Mọi trợ giúp sẽ được đánh giá cao.

Chúc mừng!

Trả lời

2

Kiểm tra các phương pháp nội suy/ngoại suy tuyến tính để giúp làm mịn chuyển động. http://en.wikipedia.org/wiki/Linear_interpolation

đây là một số tài nguyên về cách thực hiện rất nhiều các thuật toán số học trong thực tế http://www.nr.com/

Chúc may mắn!

+0

Cảm ơn, trông giống như suy tuyến tính có thể giúp đỡ. Tìm thấy một ví dụ về http://www.racer.nl/tech/multiplayer.html – Araw

+0

Điều kỳ diệu là bạn sẽ ngạc nhiên :) –

+0

Ý tưởng này có ý nghĩa như thế nào: Tôi đang sử dụng phép nội suy tuyến tính và xác định số lượng các khung hình sẽ di chuyển mỗi khi màn hình cập nhật. Do đó, nếu (tôi sẽ chỉ tập trung vào tọa độ X cho ví dụ này) tọa độ trước đó là 40 (vị trí hiện có trên màn hình), hiện tại là 60 (trong đó nhân vật sẽ chuyển đến) và khoảng thời gian frameupdate là 5 tọa độ cho mỗi lần cập nhật. Điều này có nghĩa rằng tôi sẽ nhận được 4 (4 * 5) cập nhật trước khi nhân vật đạt đến 60. Vì vậy, tôi sẽ chỉ thêm di chuyển này vào danh sách sự kiện cho ký tự đã cho và phần "lag" sẽ hầu như biến mất :) – Araw

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