Kết xuất hiệu suất cho các trò chơi Flash


11

Tôi đã đọc trên SO về kết xuất flash gốc so với xây dựng BitmapDatabộ đệm khung tùy chỉnh và một số câu trả lời hơi mâu thuẫn, vì vậy tôi đã tự hỏi:

  1. Nói chung có phải là cách tốt nhất để đi theo tuyến bộ đệm Bitmap tùy chỉnh hay tốt nhất là để kết xuất cho công cụ flash?
  2. Nếu bạn đang sử dụng ( MovieClipcác) hoạt hình vector trái ngược với các họa tiết, điều đó có thay đổi câu trả lời ở trên không?
  3. Nếu vậy thì cách tốt nhất là sử dụng hoạt hình dựa trên sprite?

(Tôi đang nhắm mục tiêu Flash 10 nếu điều đó tạo ra sự khác biệt)

Câu trả lời:


14

1. Không có thực hành tốt nhất chung.

Nếu bạn có rất nhiều yếu tố (hình phức tạp), các hạt, v.v. trong trò chơi của mình, cách tiếp cận bộ đệm bitmap sẽ nhanh hơn nhiều . Bộ đệm bitmap cũng sẽ mở rộng tốt hơn với độ phức tạp tăng dần của các họa tiết của bạn. Trình kết xuất vector sẽ trở nên chậm hơn với các hình dạng phức tạp hơn hoặc hoạt hình tween (hình dạng tween), nó có một số lợi ích khác:

  • Bạn có thể tự do phóng to tài sản của mình hoặc thậm chí phóng to cảnh mà không làm giảm chất lượng.
  • Xoay hoặc các phép biến đổi khác như xiên sẽ dễ thực hiện hơn trên đồ họa vector

Vì vậy, cuối cùng, nó tập trung vào loại trò chơi bạn đang xây dựng.

2. Sử dụng MovieClips thay vì các tấm sprite bitmap

Tôi đoán bạn có nghĩa là "bitmap sprite-sheet" chứ không phải lớp AS3 Sprite ?

Điều này không tạo ra sự khác biệt, thực sự. Bạn luôn có thể biến hoạt hình dựa trên MovieClip của mình thành bitmap hoạt hình. Bằng tay, bằng cách xuất phim thành khung và biến chúng thành một tấm sprite , hoặc động, bằng cách hiển thị một tấm sprite từ MovieClip của bạn khi chạy. Đây là cách tôi sẽ làm điều này:

  1. Tạo một thể hiện của MovieClip và stop()nó.
  2. Tạo một new BitmapDatađối tượng có cùng chiều rộng và chiều cao với Movieclip.
  3. Sử dụng phương thức draw () để kết xuất MovieClip thành BitmapData.
  4. Lưu trữ đối tượng BitmapData trong Mảng hoặc Vector.
  5. Chuyển đến khung tiếp theo của MovieClip của bạn và lặp lại Bước 2 - 4, thực hiện việc này cho đến khi bạn đạt đến khung cuối cùng của MovieClip. Bạn cũng nên cập nhật hai biến có chiều rộng tối đachiều cao tối đa của các khung MovieClip của mình (vì các biến này có thể thay đổi từ khung này sang khung khác).
  6. Bây giờ bạn có thể kết hợp tất cả các Đối tượng BitmapData được lưu trữ vào Bảng Sprite (sử dụng BitmapData.copyPixels () )

3. Hoạt hình dựa trên Sprite

Như đã đề cập trong câu trả lời cho câu hỏi đầu tiên của bạn, không có câu trả lời chắc chắn cho điều đó. Nếu bạn cần thực hiện nhiều biến đổi với các đối tượng của mình, vd. chia tỷ lệxoay bạn có thể tốt hơn bằng cách sử dụng trình kết xuất flash gốc. Nếu bạn có các hình động được xác định trước có thể được nướng thành các tấm sprite (thủ công hoặc động) nếu bạn cần hiển thị hàng trăm họa tiết cùng một lúc, thì hãy sử dụng công cụ kết xuất bitmap.


Khi (nếu?) Flash bắt đầu sử dụng tăng tốc phần cứng để kết xuất, trình kết xuất copyPixel có thể sẽ chậm hơn trình kết xuất gốc.
Bart van Heukelom

6

Tôi sẽ nói rằng nếu bạn đang xây dựng một trò chơi dựa trên raster bằng cách sử dụng các họa tiết, hãy đi cùng với việc xây dựng một giải pháp kết xuất tùy chỉnh bằng BitmapData. Nếu bạn đang xây dựng một trò chơi dựa trên vector, hãy sử dụng các cơ chế hoạt hình tích hợp bằng MovieClips.

Nếu bạn đi cùng với việc xây dựng một giải pháp kết xuất tùy chỉnh, bạn sẽ tự tách mình ra khỏi Flash bằng cách sử dụng ActionScript một mình để thực hiện những gì bạn cần. Công cụ flixel sử dụng phương pháp này và nó khá đẹp. Tôi thích viết công cụ của riêng tôi từ đầu, nhưng bạn có ý tưởng.

Sử dụng các cơ chế hoạt hình Flash tích hợp hoạt động tốt nhất cho các trò chơi dựa trên vectơ vì bạn có thể dễ dàng tạo tài sản thư viện của mình dưới dạng MovieClips mà sau đó bạn có thể khởi tạo trong ActionScript theo yêu cầu. Bạn sử dụng dòng thời gian được cung cấp các đoạn phim để xử lý hoạt hình và di chuyển vị trí của sprite tương ứng. Tất cả các BattleOn! các game như Adventure Quest Worlds sử dụng phương pháp này. Có vẻ cũng tốt.

Tôi giả sử câu hỏi cuối cùng của bạn là đề cập đến việc sử dụng lớp Sprite thay vì lớp MovieClip cho hoạt ảnh vector. Sprite là MovieClip không có dòng thời gian, vì vậy bạn sẽ mất đi sự tiện lợi khi quản lý hoạt ảnh cho bạn.


3

Mặc dù người ta thường cho rằng việc làm mờ nhanh hơn, tôi không thấy bất kỳ điểm chuẩn nào chứng minh điều này. Một số nhà phát triển chỉ thích làm mờ vì nó cho phép họ coi Flash giống như một máy ảo chung và tự điều khiển kết xuất. Tuy nhiên, nếu bạn thích danh sách hiển thị tích hợp (tôi làm), Flash có thể vui vẻ di chuyển, chia tỷ lệ, xoay và áp dụng các hiệu ứng đẹp mắt cho hàng trăm DisplayObject trên màn hình (ví dụ MovieClips, Sprites, Bitmap) ở tốc độ khung hình cao, vì vậy miễn là chúng có kích thước khá nhỏ, ví dụ kích thước nhỏ hơn 200x200 pixel. Bạn có thể sử dụng MovieClips mà không cần sử dụng vectơ. Hầu hết các trò chơi sẽ sử dụng tài sản bitmap cho dù họ sử dụng hệ thống nào. Nhưng đôi khi rất hữu ích khi bố trí và làm động các tài sản bitmap trên dòng thời gian, đặc biệt nếu bạn đang làm việc với một nhà thiết kế chuyên gia Flash chứ không phải là một nghệ sĩ pixel. Bằng cách đặt chất lượng sân khấu ở mức THẤP, bạn sẽ có được hiệu suất tốt hơn nhiều với chi phí biến đổi xấu hơn. Flash sẽ không hiển thị bất kỳ đối tượng nào tắt màn hình, vì vậy chúng không làm bạn chậm lại.

Trường hợp Flash có thể bị chậm đang di chuyển và biến đổi các ảnh bitmap rất lớn - ví dụ: nếu bạn có mức độ cuộn rất lớn hoặc nhiều lớp thị sai. Cách tiếp cận kết hợp sử dụng MovieClips cho các đối tượng trò chơi của bạn trong khi xóa nền từ bộ đệm ngoài màn hình có thể nhanh hơn và sẽ cho phép bạn có mức độ lớn vô hạn, trong khi vẫn cho phép dễ dàng sử dụng Sprites và MovieClips tiêu chuẩn.


Hình dạng vector phức tạp cũng có thể có tác động đáng kể đến hiệu suất. Nếu bạn có MovieClips hoạt hình với nhiều độ dốc và nếu bạn không chú ý đến mức độ chi tiết của các hình dạng vector của mình, thì nó sẽ vẽ chậm hơn nhiều so với bitmap.
bummzack

Bạn có thể sử dụng MovieClips mà không cần sử dụng vectơ. Hầu hết các trò chơi sẽ sử dụng tài sản bitmap cho dù họ sử dụng hệ thống nào. Nhưng đôi khi rất hữu ích khi bố trí và làm động các tài sản bitmap trên dòng thời gian, đặc biệt nếu bạn đang làm việc với một nhà thiết kế chuyên gia Flash chứ không phải là một nghệ sĩ pixel.
Iain

Vâng, đối với các trò chơi flash, tôi khuyên bạn không nên sử dụng độ dốc cho bất kỳ thứ gì sẽ là vectơ và được hiển thị bằng cách flash từng khung hình, ngoại trừ một vài điều trên HUD và sprite của người chơi. Sinh viên ăn uống hiệu suất nhanh.
Tấn côngHobo

Một số kết xuất và cập nhật điểm chuẩn: 8bitrocket.com/2007/12/23/áng
Max Dohme
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.