2013-06-19 32 views
6

Dường như tất cả mọi người đang làm một trò chơi máy tính với khung FRP phản ứng chuối, vì vậy tôi đã phải cố gắng đó quá. Tuy nhiên, tôi đang mắc kẹt với các bước đầu, cố gắng mô tả dữ liệu trò chơi như là chuối phản ứng Behavior loại.Làm thế nào để làm cho hành vi có hành vi khác trong phản ứng chuối

Về cơ bản, tôi đang cố gắng có danh sách các ký tự trò chơi (thay đổi) (chẳng hạn như Frodo hoặc Sam). Các nhân vật trò chơi có thể được cập nhật trên mỗi lượt đánh dấu trò chơi (được mô hình hóa như một sự kiện đánh dấu). Ý tưởng là bất cứ khi nào một nhân vật trò chơi được thay đổi, một Event (Character) được kích hoạt và cập nhật ký tự cuối cùng được gửi qua mạng. Lợi ích của việc này so với ví dụ Asteroids.hs là toàn bộ trạng thái trò chơi (toàn bộ danh sách nhân vật trò chơi) không cần phải được gửi qua mạng vì sẽ có một số sự kiện có một nhân vật trò chơi thay vì một sự kiện duy nhất có danh sách nhân vật trò chơi.

Đối với một nhân vật trò chơi, điều này hoạt động tốt! Tôi đã tạo Behavior (Character) với mapaccum, để tín hiệu cập nhật ký tự được gửi khi nhân vật được cập nhật. Vấn đề tôi không thể giải quyết là làm thế nào để làm cho công việc này với một danh sách các nhân vật trò chơi Behavior.

Tôi đang cố gắng lập mô hình danh sách nhân vật trò chơi là Behavior, vì các nhân vật có thể đến và tham gia trò chơi. Tôi có cần sử dụng chuyển đổi sự kiện động ở đây không? Hoặc nếu tôi không sử dụng Behavior với các nhân vật trò chơi riêng lẻ (và chỉ sử dụng Behavior với danh sách nhân vật trò chơi), có cách nào kích hoạt điều kiện các sự kiện cập nhật khi tôi đi qua danh sách ký tự không? Hay tôi không hiểu gì ở đây?

Trả lời

5

Để quản lý tập hợp các hành vi động, bạn phải sử dụng chuyển đổi sự kiện động. Xem ví dụ BarTab.hs để có trình diễn.

Tuy nhiên, chuyển đổi sự kiện động có thể hơi khó sử dụng và thường có thể tránh được. Hai tình huống phổ biến là:

  1. Việc thu thập hành vi được biết là tĩnh. Các TwoCounters.hs chứng minh rằng người ta chỉ đơn giản có thể sử dụng các combunators functor applicative để tính toán một giá trị tùy thuộc vào một trong hai hành vi.
  2. Bộ sưu tập động có thể được mô hình hóa như một hành vi của một bộ sưu tập (Behavior [a]) thay vì tập hợp các hành vi ([Behavior a]). Ví dụ Asteroids.hs minh họa cách sử dụng. Đây là một sự cân bằng kiểu cách: các mục riêng lẻ của bộ sưu tập không thể được xây dựng với FRP nữa, nhưng bộ sưu tập trở nên dễ quản lý hơn.
+1

Được rồi, tôi đã nghĩ rằng điều này có thể chứng minh là như vậy. Tôi đoán tôi sẽ thử "Hành vi của một bộ sưu tập" theo cách bạn đề cập và lọc các ký tự không thay đổi sau này. – ipuustin

+0

Đặc biệt, tôi nghĩ tôi sẽ sử dụng chức năng 'tràn 'để tách sự kiện mà danh sách ký tự được cập nhật thành nhiều sự kiện để cập nhật một ký tự đơn. – ipuustin

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