Bạn đang chán ngấy các trò chơi JavaScript và muốn thử tìm hiểu cách thức xây dựng các trò chơi trên nền web? Thì bài viết hướng dẫn sử dụng JavaScript này là một nguồn tham khảo đáng giá dành cho bạn.
Bài viết này hướng dẫn chúng ta sử dụng một thư viện JavaScript là Crafty để tạo ra một trò chơi nhập vai RPG đơn giản nhưng đồ họa khá đẹp cùng với cách chơi cũng không quá đơn giản để tạo sự nhàm chán. Cơ bản, chúng ta cần làm những việc cần thiết như: định hình các nhân vật, xây dựng các cảnh chơi, xây dựng lối chơi (gameplay), tạo các hoạt hóa và kết hợp chúng thành một thể thống nhất.
Trang trong sẽ cung cấp cho bạn bài viết chi tiết cùng với hướng dẫn, cũng như là trò chơi mẫu để bạn thử cùng với mã nguồn đầy đủ cho phép bạn tải về.
- Demo
- Phóng to
- Tải lại
- Cửa sổ mới
Tạo video bằng AI chỉ với giọng nói hoặc văn bản
Ứng dụng video AI MIỄN PHÍ hàng đầu của bạn! Tự động hóa video AI đầu tiên của bạn. Tạo Video Chuyên Nghiệp Của Bạn Trong 5 Phút Bằng AI Không Cần Thiết Bị Hoặc Kỹ Năng Chỉnh Sửa Video. Sản xuất video dễ dàng dành cho nhà tiếp thị nội dung.
The day has come where JavaScript games are possible and not only possible but simple. This article will show you how easy it is to create games in JavaScript using the canvas tag and even basic divs with the help of a new game engine called Crafty.
This tutorial will demonstrate how to build a Pokemon-style RPG with Crafty. You’ll be able to add your own features once you learn the basics. If you’d like to see the what we’ll be building.
Before we get started there are some key concepts to learn which may differ to what you are used to. Crafty uses something called an Entity Component system. Entities are your game objects (players, enemies, walls, balls) and Components are objects or a set of functions and properties that can be applied to any entity which will inherit the functionality.
If you are used to Object Oriented programming, this is similar to one level of multiple inheritance. This is useful in game development because it avoids long chains of inheritence and messy polymorphism.
Crafty uses syntax similar to jQuery by having a selector engine to select entities by their components:
Crafty("mycomponent")
Crafty("hello 2D component")
Crafty("hello, 2D, component")
The first selector will return all entities that has the component mycomponent
. The second will return all entities that has hello
and 2D
and component
whereas the last will return all entities that has at least one of those components.
If you are a bit confused, fear not, first hand experience will make it click. So let’s dive in!
Supplies
We need to setup our Crafty game. The skeleton of a Crafty game is a single HTML file with a script tag pointing to the Crafty JS file and another script tag for the game logic — in this example it’s game.js
:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<script type="text/javascript" src="http://craftyjs.com/release/0.3/crafty.js"></script>
<script type="text/javascript" src="game.js"></script>
<title>My Crafty Game</title>
<style>
body, html { margin:0; padding: 0; overflow:hidden; font-family:Arial; font-size:20px }
#cr-stage { border:2px solid black; margin:5px auto; color:white }
</style>
</head>
<body>
</body>
</html>
Here’s a simple Crafty game skeleton:
window.onload = function() {
//start crafty
Crafty.init(50, 400, 320);
Crafty.canvas();
};
When the window
object is loaded, initialize Crafty with a frames per second of 50, a width and height of 400 and 320 respectively, and create a Canvas
element. In case you’re wondering, the reason for these dimensions is so 25 16×16 tiles can fit horizontally and 20 vertically.
Note: Crafty.canvas()
is required for any canvas drawing. It can be left out if all drawing is done with DOM.
Now we have the basics of a Crafty game! Every game you create with Crafty will have generally the same skeleton code so feel free to use this as a template. Next up is setting up scenes.
Scenes
Scenes in Crafty are a quick way to organise game objects and easily change between screens or levels. In our RPG we want a loading scene and the main scene which will be the game.
window.onload = function() {
// Start crafty
Crafty.init(50, 400, 320);
Crafty.canvas();
// The loading screen that will display while our assets load
Crafty.scene("loading", function() {
// Load takes an array of assets and a callback when complete
Crafty.load(["sprite.png"], function() {
Crafty.scene("main"); //when everything is loaded, run the main scene
});
// Black background with some loading text
Crafty.background("#000");
Crafty.e("2D, DOM, text").attr({w: 100, h: 20, x: 150, y: 120})
.text("Loading")
.css({"text-align": "center"});
});
// Automatically play the loading scene
Crafty.scene("loading");
};
Whoa, where did all that code come from? First we declare the loading
scene and tell it what to display when it is played then run it straight away. Crafty.scene()
is used to declare a scene as well as play it. In the loading scene we pre-load some assets, set the background to black and add some loading text. Crafty.load()
is used to pre-load assets such as sounds or images and once completed, call a function. In our game we want to play the main scene as soon as the assets are loaded.
Note: If you need an entity to persist through changing scenes, simply add a component called persist
.
- Lượt gửi (0)
- Mới