2010-08-12 13 views
5

ok, vì vậy rõ ràng trò chơi xna chỉ có thể chạy ở tốc độ 30 khung hình/giây, điều này thật đáng tiếc vì trò chơi trên iphone của chúng tôi có vẻ tốt hơn ở mức 60 ...windows phone 7, xna, làm thế nào để tôi lấy mẫu màn hình cảm ứng thường xuyên hơn

ở bất kỳ mức nào, vì cách duy nhất bạn có thể nhận thông tin về trạng thái màn hình cảm ứng là nhận trạng thái hiện tại, điều này có nghĩa là bạn chỉ có thể lấy mẫu màn hình cảm ứng ở tốc độ 30 khung hình/giây.

ngay cả khi trò chơi của chúng tôi phải chạy ở tốc độ 30 khung hình/giây, có cách nào để lấy mẫu có độ phân giải cao hơn từ màn hình cảm ứng không? có thể thông qua callbacks? hoặc bằng cách truy cập danh sách các sự kiện liên lạc có dấu thời gian?

Trả lời

0

Tốc độ lấy mẫu 30 khung hình/giây được đặt cho lý do hiệu suất.

Thậm chí nếu bạn có thể tìm cách truy vấn chạm thường xuyên hơn, bạn vẫn không thể cập nhật giao diện người dùng ở tốc độ nhanh hơn, vì vậy tôi không chắc bạn sẽ nhận được lợi ích gì.

Trước khi dành quá nhiều thời gian cho việc tìm một giải pháp tôi muốn thử nghiệm trên một thiết bị thực tế để xem mức độ chấp nhận được là 30fps.

+0

oh, chúng ta có, và vấn đề là chúng ta có giống như một đường mòn theo sau các liên lạc xung quanh. và tất cả đều gập ghềnh ở tốc độ 30 khung hình/giây, chúng tôi đã làm mịn nó với splines trong thời gian này, nhưng nó vẫn có vẻ hơi lạ khi bạn không thể làm điều đó ... bạn có thể làm điều đó trên iPhone 3G ... và tôi có thiết bị nấu ăn có tính toán mạnh mẽ hơn thế ... địa ngục ... ngay cả DS ... – matt

+0

Bạn phải nhớ rằng hệ điều hành Windows sẽ không luôn chạy trên cùng một phần cứng như iPhone - sẽ có các khả năng khác nhau có sẵn . Ngoài ra còn có tuổi thọ pin để xem xét. –

2

Chức năng bạn đang tìm kiếm là TouchPanel.GetState. Đó là một vấn đề đơn giản gọi hàm này ở 60Hz.

Để nhận 60Hz, bạn có thể đặt Game.TargetElapsedTime thành 1/60 giây. Điều này sẽ cung cấp cho bạn hai bản cập nhật cho mỗi một bản vẽ (theo Shawn Hargreaves' post here) giả sử bạn đang VSyncing tại 30FPS.

Nếu bạn vẫn muốn cập nhật trạng thái trò chơi của mình chạy ở 30FPS (chỉ cần thực hiện chạm vào ở 60FPS), thì bạn có thể đặt các cập nhật đó lên một chuỗi khác. Bắt đầu cập nhật diễn ra chuỗi đó trong lần gọi đầu tiên đến Game.Update và đợi cho đến khi kết thúc cuộc gọi thứ hai, v.v.

(Bạn nên lưu ý rằng đầu vào thường XNA phải được thực hiện trên các chủ đề chính (source). Tôi giả định này áp dụng cho điện thoại và chạm vào đầu vào.)

Hoặc bạn có thể thay thế Game lớp của thời gian bản thân hoàn toàn (hãy tự gọi số GraphicsDevice.Present). Nó không dễ dàng để làm, nhưng nó có thể. Một nơi tốt để bắt đầu là xem lớp Game trong Trình phản xạ.

(Disclaimer:. Tôi đã không cố gắng nào phát triển điện thoại dựa trên thực tế, vì vậy có thể có một số gotchas Điện thoại liên quan đến tôi không biết)