2008-10-01 24 views
5

Tôi có câu hỏi về các vòng lặp trong flash ....flash: cho các vòng chạy chậm

Trong trò chơi xếp hình tôi đang tạo một bản đồ thu nhỏ của toàn bộ cấp độ. Cách nó biểu diễn bản đồ là một hàm có vòng lặp for trong vòng lặp khác cho vòng lặp. Nó xoay vòng qua từng vị trí lát và đính kèm một mảnh bản đồ (về cơ bản là một hình vuông 3x3 pixel) được tô màu theo những gì mà ngói được tạo ra. Dù sao, vấn đề của tôi là khi mức độ được lớn như 50x50 gạch bản đồ redering mất mãi mãi (lên đến 3 giây). Có cách nào để sửa lỗi này không? Hay có cách nào khác để làm một bản đồ mini? Nếu mức độ trở nên lớn hơn, nó có thể mất 10 giây!

Mọi trợ giúp đều được đánh giá cao!

Cảm ơn, Matt

+0

Bạn có thể đăng ví dụ mã không? Đây có phải là as2 hoặc as3 không? – defmeta

Trả lời

0

Nó không nên mất nhiều thời gian cho các vòng tự để chạy, nhưng những gì, chính xác, bạn có đang bên trong mỗi vòng lặp? Các hoạt động đính kèm và tô màu một mảnh bản đồ là gì?

-Adam

+0

Tôi đồng ý, nó sẽ được vẽ chậm mà nhiều đối tượng nhưng 3 giây là một chút trên đầu trang. – grapefrukt

3

Flash không hiển thị ô rất nhanh. Thật tuyệt vời khi lưu trữ đồ họa không thay đổi trong bộ đệm và nhanh chóng hiển thị bộ đệm này một cách nhanh chóng. Mỗi đối tượng đồ họa (hoặc sprite) được thêm vào như là một đứa trẻ cho giai đoạn phải được trả lại một cách độc lập.

Vấn đề của bạn là flash phải vẽ 50x50 = 2500 ô mỗi khung hình! Ngay cả khi chúng 3x3 pixel, flash vẫn coi chúng là các đối tượng riêng biệt.

Sẽ rất tuyệt nếu bạn có thể lưu trữ mọi thứ trong bộ đệm hoặc trong một đối tượng và hiển thị nó. Vì vậy, hãy thử vẽ các ô 3x3 này trong cùng một đối tượng thay vì nhiều đối tượng. Tuy nhiên, điều này có thể cản trở chức năng của bạn vì toàn bộ đối tượng sẽ phải được hiển thị lại mọi khung hình.

Một số đề xuất khác có thể là hiển thị đối tượng trong ô lớn hơn trên lưới. Thay vì có 50x50, bắt đầu bằng 10x10 và sau đó vẽ ô 5x5 trong mỗi ô. Điều này có lẽ sẽ tăng tốc độ.

Hy vọng điều này sẽ hữu ích. Nếu bạn tìm được giải pháp tốt thì hãy đăng bài!

1

Có. Bản thân vòng lặp không mất nhiều thời gian. Nhưng trong mỗi lần lặp tôi gắn một movieClip từ thư viện. Bằng cách này nó không làm điều này trên enterFrame, chỉ khi người dùng nhấn Pause (không gian).

1

Rất có thể đó là (như đã đề cập ở đây) vòng lặp của bạn chậm. Đếm 0-2500 thực sự nhanh nhưng nếu bạn đang tính toán nặng trong mỗi lần lặp, nó sẽ tăng lên. Tất nhiên mà không nhìn thấy mã chúng tôi không thể giúp bạn với điều này. Trong khi bạn có thể thực hiện các thủ thuật để chạy vòng lặp đó mượt mà hơn (như chạy nhiều khung hình) nhưng nếu đó là vòng lặp 3 giây, có thể bạn sẽ làm rất nhiều để tối ưu hóa nó - thậm chí đến mức nó sẽ chạy mượt mà , để nó không gây ra quá nhiều thời gian.

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