-->

  • Learning Construct 2 - Chương 9 - Phần 2




    2. Biết được nguyên nhân gây hiệu suất kém


    Bên cạnh việc lưu ý về duy trì hiệu suất tốt trên nền tảng di động, bạn cũng cần phải biết những gì làm cho trò chơi của bạn chậm. Những thứ tôi sắp liệt kê là những gì phổ biến và gây kém hiệu suất cho bất kì dự án nào. Khi trò chơi của bạn chạy hcaamj trên các nền tảng đã được kiểm tra, hãy kiểm tra xem bạn có làm những gì ở đây ko:
    • Thay đổi đối tượng văn bản tại mỗi lần tích: cho dù chúng thay đổi kích thước hay văn bản, sẽ tốn khá nhiều hiệu suất. Thông thường, sự biểu diễn văn bản rất nhanh, nhưng khi được thay đổi, đối tượng phải vẽ lại văn bản và thay đổi cấu trúc lưu trữ, có thể tốn kém.
    • Sử dụng quá nhiều đối tượng vật lí: đối tượng vật lí thật sự là những thao tác tốn CPU. Sử dụng quá nhiều chúng sẽ gây chậm nặng nề trò chơi của bạn. Cố gắng duy trì một vài đối tượng vật lí lớn hơn là nhiều đối tượng vật lí nhỏ.
    • Tạo quá nhiều đối tượng: mặc dù việc tạo ra một đối tượng không đáng kể gì, nhưng nếu tạo ra quá nhiều cùng một lúc thì sẽ gây chậm game. Luôn luôn thiết kế trò chơi của bạn sử dụng một vài đối tượng. Tương tự, tạo ra đối tượng trên màn hình cuộn và quên xóa chúng sau khi cuộn sẽ làm nặng trò chơi.
    • Sử dụng quá nhiều hiệu ứng: sử dụng 1 hiệu ứng trên quá nhiều đối tượng là một hành vi gây nặng game của bạn. Tốt hơn là nên có một layer đặc biệt để sử dụng cho đối tượng có cùng hiệu ứng, điều này sẽ làm việc thực hiện các hiệu ứng nhanh hơn, bởi vì C2 có thể thực hiện nó trong một thao tác thay vì làm nhiều thao tác giống nhau.
    • Sử dụng quá nhiều sprite: giống như việc tạo quá nhiều đối tượng, sử dụng quá nhiều sprite cũng gây ảnh hưởng đến hiệu suất của game. Vì dụ của việc này xảy ra như thế nào là khi bạn sử dụng quá nhiều sprite để tạo một background, thay vì sử dụng nhiều sprite, sử dụng Tiled ground sẽ hiệu suất hơn. Nếu tạo background không phải là lí do sử dụng quá nhiều sprite, điều này có nghĩa là bạn cần thiết kế trò chơi cẩn thận hơn để tránh sử dụng quá nhiều sprite.

    3. Liệt kê những sai lầm tối ưu hóa thông thường


    Bây giờ bạn đã biết về những thứ khiến trò chơi của bạn chạy kém, nhưng khác với điều này, có những điều mọi ngừoi nghĩ là có ảnh hưởng đến việc kém hiệu suất nhưng thực ra lại ít ảnh hưởng. Biết những điều này cũng quan trọng như việc biết các nguyên nhân gây kém hiệu suất, bởi vì bạn có thể tiết kiệm thời gian của mình trong việc tối ưu hóa hiệu năng. Dứơi đây là một số quan niệm sai lầm:
    • Các đối tượng ngoài màn hình vẫn hoạt động: C2 đủ thông minh để ko vẽ các đối tượng bên ngoài màn hình, điều duy nhất nó làm là chiếm ko gian bộ nhớ. GPU (bộ phận phát triển đồ họa) ko hiển thị hình ảnh đó, hình ảnh bên ngoài màn hình, ngay cả khi chúng là một phần của một sprite đơn lẻ.
    • Các định dạng hình ảnh ảnh hưởng đến hiệu suất thời gian chạy: điều duy nhất nó gây ảnh hưởng là kích cỡ tải về, chúng không gây ảnh hưởng đến hiệu suất của thời gian chạy. Cũng giống với định dạng âm thanh.
    • Số lượng layer hoặc layout cũng ảnh hưởng đến hiệu suất: số layer sử dụng không ảnh hưởng gì đến hiệu suất, trừu khi có nhiều layer thay đổi đột ngột độ mờ hay áp dụng dụng hiệu ứng. Sẽ ko ảnh hưởng gì nếu sử dụng nhiều layer với cài đặt mặc định. Số layout sử dụng cũng không ảnh hưởng đến hiệu suất.
    • Biết bạn đang tối ưu hóa cái gì: một điều cuối cùng tôi cần nói với bạn đó là không cần tối ưu hóa những gì không cần tối ưu hóa.

    4. Đánh lại tốc độ khung hình trên giây

    Có lẽ chỉ số hiệu suất quan trọng nhất trong bất kì trò chơi nào đó là nó có thể hiện thị bao nhiêu mỗi giây, điều này được chỉ ra bởi FPS (khung hình trên giây). Các màn hình máy tính hiện đại cập nhật ở 60Hz, có nghĩa là nó có thể cập nhật 60 lần trên giây. Nói theo nghĩa của trò chơi, trừ khi trò chơi của bạn phụ thuộc vào khung hình cao, ví dụ như đua xe, 30 FPS là đủ cho game của bạn. Nếu game của bạn chạy 60 FPS hoặc hơn. Ko cần phải cải thiện hiệu suất trò chơi nữa. Nếu trò chơi của bạn chạy chậm hơn 30 FPS, tốc độ giảm sẽ gây chú ý đến mắt người, hãy cố gắng duy trì mức độ 30 FPS.

    5. Hiểu được phần nào của trò chơi để tối ưu hóa


    Nói chung, các trò chơi xử lí 2 việc: logic và hiển thị. Logic là nơi tất cả các luận lí trò chơi của bạn được thực hiện, ví dụ như chạy các logic sự kiện, kiểm tra va chạm, chạy vật lí, vân vân. Hiển thị đơn giản là quá trình vẽ hình ảnh trên màn hình. Nó ko phải là ko bình thường cho một trò chơi dành 10% thời gian xử lí logic và 90% trong phần hiển thị.

    Điều này có nghĩa là bất cứ khi nào bạn muốn tăng tốc trò chơi của mình, luôn luôn cố gắng cải thiện hiệu suất đồ họa của bạn đầu tiên. Điều này có thể làm bằng cách giảm số lượng sprite trên màn hình, cố gắng sử dụng Tiled background khi có thể, ko sử dụng quá nhiều hiệu ứng, vân vân.



    WAITING FOR LUV
    Bạn có muốn cải thiện khả năng thiết kế đồ họa của mình? Chắc hẳn các bạn cũng biết, nếu các dòng code là linh hồn của một trò chơi, thì đồ họa chính là bộ mặt của trò chơi đó. Đồ họa đẹp, dễ nhìn sẽ khiến trò chơi của bạn tăng tỉ lệ hấp dẫn người xem đến 90%. Hiện tại có hai công cụ hỗ trợ thiết kế đồ họa game tiện nhất mà mình biết, đó là Photoshop và Illustrator. Mình sẽ cố gắng tìm kiếm và chia sẻ các đồ họa game miễn phí cho các bạn tại blog này; tuy nhiên, một trò chơi mà 100% do chính mình tạo ra vẫn hơn là đi cóp nhặt hình ảnh từ nơi khác đúng không nào. Tiện đây, mình có chia sẻ một khóa học thiết kế đồ họa Game 2D cho Mobile. Các bạn có thể tham khảo dưới đây để được giảm 40% học phí nhé.


    6. Xem trước qua Wifi


    C2 có tính năng rất hữu ích khi bạn muốn test game của bạn trên thiết bị khác; cái này được gọi là xem trước quá Wifi tức thì. Ví dụ, nếu bạn có một máy tính hay một Ipad sử dụng chung một kết nối Wifi, bạn có thể test game trên Ipad mà không cần xuất game ra trước.

    Để sử dụng tính năng này, chúng ta phải kích hoạt nó từ C2. Mở File menu và sau đó là hộp thoại Preferences. Sau khi hộp thoại Preferences, lựa chọn Preview tab và nhìn vào phần Preview on LAN address. Theo định nghĩa, nó sẽ hiển thị localhost, điều này có nghĩa là bạn đnag xem trước trên PC của bạn. Kích vào hộp nhỏ bên phải để hiển thị địa chỉ local:



    Danh sách local addresses là địa chỉ mạng địa phương của bạn, nó thường xuất hiện theo định dạng sau: 129.168.X.Y. thông thường, chỉ có một trong số đó ngoài localhost; chọn nó và nhấn nút OK.


    Sau đó, nhấn nút Ok trong hôp thoại Preferences. Bước tiếp theo là đóng C2 và khởi động lại với sự cho phép của quản trị viên (adminstrator). Nếu bạn chạy project của bạn bây giờ, bạn sẽ nhận thấy sự thay đổi nhỏ trong địa chỉ của trò chơi được hiển thị ở thanh địa chỉ, điều này khác cho mỗi thiết lập. Nó sẽ như thế này:




    Nếu bạn gõ địa chỉ được hiển thị ở đây trên trình duyệt của di động hay máy tính bảng, bạn sẽ có thể xem trước game trên điện thoại của mình. Điều này rất hữu ích khi bạn đang tạo các trò chơi di động, vì nó tiết kiệm nhiều thời gian và công sức.

    Xem trước qua Wifi không có sẵn trong bản free.

    Đừng đóng Preview tab, hãy thử thay đổi một cái gì đó trong project và chạy lại nó. Bạn sẽ thấy trình duyệt trên PC hay thiết bị của bạn tự động làm mới, hiển thị bản mới nhất của trò chơi. Điều này thật sự tuyệt vời!


    Bài 3. Sử dụng bộ nhớ của bạn một cách khôn ngoan


    Được rồi, tôi đã đề cập đến những điều thông thường và kĩ thuật bạn nên biết khi bạn muốn cải thiện hiệu suất trò chơi của mình. Tuy nhiên, có một điều bạn cần phải biết khi phát triển những trò chơi: bộ nhớ. Thiết bị di động có bộ nhớ hạn chế, chính vì vậy luôn lưu ý đến bộ nhớ khi làm game.

    1. Tránh sử dụng các tệp hình ảnh lớn


    Có thể bạn vẫn nhớ tôi đã nói rằng không sử dụng quá nhiều sprite trong project của bạn, hoặc nếu bạn cần sử dụng một hình ảnh liên tục, thì tốt hơn nên sử dụng Tiled background thay thế, bởi vì C2 coi nó như một đối tượng. Một điều bạn cần lưu ý là bạn không nên sử dụng một tệp hình ảnh quá lớn hoặc chi tiết trong trò chơi của bạn. Nếu bạn là một nhà thiết kế và muốn sử dụng hình ảnh HD cho level của bạn, hãy biết rằng nó sẽ không hoạt động, đặc biệt là trên di động.

    Hãy để tôi giải thích. Hình ảnh được tạo từ các điểm ảnh, chính vì vậy một hình ảnh 1920 x 1080 pixels sẽ bao gồm 2073600 pixels. Mỗi pixel chiếm khoảng 4 bytes trong bộ nhớ cho các giá trị đỏ, xanh lá cây, xanh dương và trong suốt. Để tìm ra không gian bộ nhớ cho hình ảnh này, chúng ta chỉ cần một phép tính đơn giản: 2073600 x 4 = 8294400 bytes, khoảng 8 megabytes.

    Nhiều thiết bị không hỗ trợ hình ảnh mà kích thước của nó không mũ hai, tức là 16x16, 32x32, 128x128 và vân vân. Hình ảnh ko có kích cỡ mũ hai sẽ được đặt trong khối bộ nhớ đủ để chứa chúng. Trong trường hợp tệp hình ảnh HD của chúng ta, chúng sẽ được đặt trong khối bộ nhớ của kích cỡ 2048x2048; tức là 8 MB sẽ trở thành 16 MB.

    Có thể bạn đang nghĩ, vấn đề ở đâu khi mà máy tính ngày nay có nhiều hơn 4GB bộ nhớ? Máy tính thường có bộ nhớ video / VRAM cho việc hiển thị, và cho hiệu suất tối đa, tất cả hình ảnh phải phù hợp với nó. Nếu hệ thống chỉ có 256MB VRAM, bạn chỉ có thể đặt 32 hình anh HD vào trong đó, và đây là nếu bạn được phép truy cập tất cả VRAM. Hệ điều hành sẽ sử dụng một số VRAM cho các ứng dụng khác, chính vì vậy hầu hết thời gian bạn ko thể sử dụng tất cả VRAM và đừng qên rằng bạn còn sử dụng hình ảnh khác ngoài hình ảnh HD.


    Điều này thậm chí còn đáng quan tâm hơn trên thiết bị di động, bởi vì hầu hết thiết bị di động không có VRAM và sử dụng bộ nhớ hệ thống cho mọi thứ. Có thể một chiếc điện thoại di động có khoảng 100 MB bộ nhớ có sẵn. Giả sử trò chơi của bạn dùng một nửa bộ nhớ có sẵn, khoảng 50 MB, và hình ảnh HD của bạn chiếm đến 16 MB, bạn sẽ chỉ có chỗ cho hai hình ảnh. Nhiều vãi nhỉ, hừm z.z.z.z.

    Hình ảnh phải được thiết kế theo kích thước dự kiến của chúng trong trò chơi. Không sử dụng hình ảnh quá lớn và thay đổi kích thước của chúng trong C2 bằng cách kéo các điểm thay đổi kích thước. Điều này sẽ dẫn đến một hình ảnh lộn xộn, lỗi.

    2. Thực hiện đúng cách


    Hãy để tôi nói cho bạn một bí mật: không ai tạo một cấp độ game với quá nhiều hình ảnh lớn, không phải tôi, không phải tất cả các nhà phát triển khác. Bạn không thể làm một trò chơi nhanh, mượt mà với một cái background lớn như thế. Những gì bạn có thể làm thay vào đó là sử dụng Tiled background để sử dụng lặp lại một sprite mà ko ảnh hưởng đến hiệu suất và sử dụng một số sprite khác để thêm các biến thể. Bạn cũng có thể xoay và cân đối các đối tượng để thực hiện mức độ cảu bạn ít lặp đi lặp lại.

    Ảnh chụp màn hình tiếp theo là ví dụ về cách bạn có thể sử dụng nhiều sprite nhỏ để tạo một cấp độ. Một lợi thế của việc làm thế này là bạn có thể sử dụng lại chúng để tạo cấp độ khác. Một điểm cộng nữa là bạn có thể tạo trình chỉnh sửa cấp độ đặc trưng cho game của bạn, và các nhà thiết kế có thể sử dụng các sprite này để tạo một cấp độ, trong khi các lập trình viên và họa sĩ làm công việc của họ; đó chính là tăng năng suất.

    Ảnh chụp dưới đây hiển thị ví dụ của một cấp độ bao gồm nhiều đối tượng nhỏ, một trong số này tròn:


    Một điểm tốt khác khi bạn tạo cấp độ của bạn theo cách này là bạn có thể thêm cái này vào bộ máy gameplay của bạn. Bạn có thể đẩy các hộp, hoặc một quả bom để nổ, nó phụ thuộc vào sự sáng tạo của bạn.

    3. Construct 2 - kết cấu tải


    Trong C2, kết cấu được tải trên layout, điều này có nghĩa là nó sẽ tải tất cả kết cấu mà layout đó sẽ sử dụng trước khi bắt đầu. Điều này làm cho trò chơi chạy nhanh hơn, bởi vì tải kết cấu trong khi chơi sẽ làm trò chơi bị dừng một chút, rất khó chịu. Khi chuyển sang layout khác, C2 sẽ loại bỏ tất cả các kết cấu ko sử dụng đến và tải các kết cấu ở layout tiếp theo.

    Điều này có nghĩa là việc sử dụng bộ nhớ của trò chơi là kết quả của layout và hầu hết các hình ảnh, ko phải tổng số hình ảnh được sử dụng trong trò chơi. Điều này cho phép bạn có một thiết lập của sprite cho một khu rừng, hay một thiết lập khác cho núi, hoặc dung nham.

    4. Những hạn chế trên thiết bị di động


    Mỗi pixel trên thiết bị di động chỉ có thể vẽ 3 lần trên mỗi khung hình trong khi vẫn duy trì 60 FPS; điều này có nghĩa là bạn chỉ có thể sử dụng 3 hình ảnh kích cỡ toàn màn hình để duy trì hiệu suất 60 FPS. Tôi đã đề cập ở phần đầu chương này rằng một hình ảnh cũng bao gồm các điểm ảnh trong suốt, vì vậy nếu bạn có một hình ảnh quá nhiều điểm trong suốt, bạn nên cân nhắc việc cắt hình ảnh này thành bộ phận nhỏ hơn để tránh ảnh hưởng đến hiệu suất.

    GPU xử lí một hình ảnh bất kể màu sắc hay thành phần của giá trị alpha; điều này có nghĩa là các phần trong suốt của hình ảnh cũng được hiển thị. Đây là một hạn chế phần cứng, không chỉ riêng C2 mà các framework khác, có thể tránh được nó. Giải pháp tốt nhất là sử dụng nhiều hình ảnh nhỏ hơn, bởi vì hiển thị nhiều hình ảnh nhỏ dễ dàng hơn vẽ một hình ảnh lớn trong 1 hành động.


    Tổng kết


    Biết làm một trò chơi là không đủ, bạn cần phải biết cách tối ưu hóa nó. Đảm bảo rằng trò chơi của bạn chạy đủ nhanh trên bất kì thiết bị nào. Có rất nhiều thứ mà bạn cần chắc chắn rằng hiệu suất ổn định, hãy test trước trên mọi thiết bị có thể. Bạn có thể tăng hiệu suất bằng cách không tạo quá nhiều đối tượng trên màn hình. Bạn nên nhớ rằng physic object tốn nhiều CPU, hãy cố đừng sử dụng chúng quá nhiều.

    Trong việc sử dụng asset của bạn, bạn cần phải nhớ định dạng tệp tốt nhất mà bạn sử dụng: 32 bit với hình ảnh PNG và 16 bit WAV với tệp âm thanh. C2 có thể chuyển đổi âm thanh sang các tệp phù hợp với mọi trình duyệt hiện nay. Nên sử dụng nhiều hình ảnh nhỏ thay vì một hình ảnh lớn.

    Bạn đã biết cách tạo một trò chơi trong C2 và các best practice để sử dụng khi tạo game. Chỉ còn một điều cuối cùng bạn cần biết: xuất bản trò chơi của bạn, đưa trò chơi ra khỏi C2 để mọi người cùng chơi. Bạn sẽ được học điều này trong chương cuối. 



    Bản dịch do construct2vn.ga thực hiện
    Ai sao chép hay chia sẻ hãy ghi nguồn và đưa link www.construct2vn.ga vào đầu bài chia sẻ nhé


  • DONATE TINH THẦN CHO BLOG TẠI ĐÂY

    Nếu các bạn thấy blog có ích hãy ủng hộ blog hàng ngày tại đây. Chỉ cần thi thoảng chơi game và tìm bug cho tụi mình là được. Đây là ủng hộ tinh thần, không phải tiền mặt, vật chất và không bắt buộc. Xin chân thành cảm ơn ahihi. Chúc các bạn một ngày zui zẻ.

    TELEPHONE

    02273 7x2 xxx
    02273 xxx 27x

    MOBILE

    0162 x15 xx33