Chỉnh sửa: Điều này làm cho rất nhiều ý nghĩa với tôi bây giờ mà tôi đã lấy một bước đi từ mã, nhờ sự giúp đỡ.Gameloop cho j2me "theo lượt" trò chơi
Chỉ tìm thấy tràn ngăn xếp vào ngày khác thông qua Mã hóa Kinh dị và có vẻ tuyệt vời. Hình rằng tôi muốn hỏi cộng đồng về một vấn đề mà tôi đang cố gắng giải quyết.
Tôi đang phát triển trò chơi xếp loại roguelike sử dụng j2me cho điện thoại 2.0 midp. Dự án vẫn đang trong giai đoạn phát triển cơ bản khi tôi tìm ra cách nó sẽ hoạt động. Phần tôi hiện đang mắc kẹt phải làm với luồng.
Trò chơi có lớp tùy chỉnh HaxCanvas
kéo dài thời gian chạy GameCanvas và Implements. Đó là phương thức chạy các cuộc gọi repaint() và sau đó ngủ trong 50 ms, dẫn đến tốc độ khung hình là 20 FPS. Điều này cho phép tôi viết phần còn lại của trò chơi mà không cần phải đặt dấu vết ở khắp mọi nơi và nên làm cho hình động và hiệu ứng dễ dàng hơn để làm sau này. (ít nhất là về lý thuyết).
Luồng trò chơi được điều khiển bởi lớp GameManager, vòng lặp qua tất cả NPC trên bản đồ, thay phiên nhau, cho đến lượt của người chơi. Tại thời điểm này tôi cần phải nhận được đầu vào để cho phép người chơi di chuyển xung quanh và/hoặc tấn công mọi thứ. Ban đầu, tôi đã gọi số gameManager.runUntilHeroTurn()
theo phương thức keyPressed
của số HaxCanvas
. Tuy nhiên sau khi đọc về các chủ đề hệ thống j2me, tôi nhận ra rằng việc đặt một phương thức có khả năng chạy trong một thời gian trong một cuộc gọi lại là một ý tưởng tồi. Tuy nhiên tôi phải sử dụng keyPressed để thực hiện thao tác nhập liệu, vì tôi cần truy cập vào các phím số và getKeyStates()
không hỗ trợ tính năng này.
Hãy cố gắng để đưa gameloop của tôi vào chủ đề riêng của nó đã dẫn đến thảm họa. Một "ArrayIndexOutOfBoundsException" không có dấu lạ "" không có dấu vết ngăn xếp xuất hiện sau khi trò chơi đã chạy nhiều lần.
Vì vậy, tôi cho rằng câu hỏi của tôi là thế này:
Đối với một "biến dựa trên" trò chơi trong j2me, cách tốt nhất để thực hiện các vòng lặp trò chơi là những gì, cho phép đầu vào chỉ handeling khi đến lượt của người chơi?
Nhân tiện, câu hỏi hay. +1 – Fostah