[Hướng Dẫn] Căn bản về Instance - Focker C
Focker_c
Posts: 1,577Registered
Instance
Chào các bạn. Mình là Focker C - mod GME diễn đàn TTC hiện thời.
Hôm nay mình xin post một mini-guide GME về một vấn đề rất cơ bản, nhưng thường bị các GMU (Game Maker Users) bỏ qua. Đó là "Instance". Từ ngữ này chắc hẳn các GMU gặp khá nhiều trong các guide hay tip mà ko hiểu được nghĩa chính xác của nó.
Vậy, Instance là gì ? Có ăn đc ko ? :D
Điều chắc chắn là nó ko ăn được, và để hiểu được Instance là gì, thì trước tiên phải biết Object là gì.
Objects là các "vật thể" sẽ có mặt trong game, thực hiện các sự kiện riêng mà người lập trình giao phó cho. Ví dụ : Con quái , người chơi , viên đạn.
Ở hình trên, mình tạo ra 1 object có tên là "tao_la_object_day".
Về cơ bản, có những vật thể ko chỉ xuất hiện 1 lần. Ví dụ như object "tao_la_object_day" của mình là 1 con quái, và nó sẽ có mấy con trong map chứ ko phải một. Vậy chẳng nhẽ lại phải tạo thêm 4, 5 cái object tương tự sao ?
Không, trong cơ chế của GME, bạn có thể lặp lại 1 object nhiều lần trong 1 room. Mỗi lần lặp lại này đều tạo ra một bản sao. Những bản sao này được gọi là INSTANCE.
Chúng đều thừa hưởng những event của object gốc, nhưng hoạt động độc lập. Chúng cũng có ID riêng để GMU có thể đưa ra các lệnh chỉ định riêng.
Trong hình trên, mình tạo ra 6 con quái (instances) trong room. Nếu bạn đưa chuột vào con giữa như trong hình , bạn có thể xem được ID của instance này (ID = 100008)
Ví dụ mình muốn con quái ở giữa này di chuyển tới vị trí có tọa độ (123,456) mà các con khác vẫn đứng yên thì viết script sau
Một số lệnh mạnh hơn, sẽ giúp bạn khi muốn lấy ID của các instance :
- instance_exists(obj) : trả về giá trị true hay false về việc có instance nào của object mang tên "obj" tồn tại hay ko.
- instance_number(obj) : trả về số lượng instance của object mang tên "obj".
- instance_position(x,y,obj) : trả về ID của instance tạo ra từ "obj" và đang ở vị trí (x,y)
- instance_nearest(x,y,obj) , instance_furthest(x,y,obj) : lần lượt trả về ID của instance tạo ra từ "obj" và đang gần nhất / xa nhất so với mốc lấy ở vị trí (x,y)
- instance_create(x,y,obj) : tạo ra một instance từ object "obj" và đặt nó ở vị trí (x,y)
- instance_destroy() : phá hủy instance chứa lệnh này.
NÂNG CAO HƠN CHÚT NỮA :
Ví dụ 1 : Tôi muốn tạo ra 1 instance mới và lấy được ID của nó luôn.
Trả lời : Đây :
Ví dụ 2 : Tôi muốn phá hủy 1 instance khác chứ ko phải instance đang viết script.
Trả lời : Đây :
Hết , mong rằng mini-guide này có ích cho các GMU nói chung và cộng đồng GMU TTC "mới vào" nói riêng. :D
Ơ ? Có cái spoiler kìa ??
Chào các bạn. Mình là Focker C - mod GME diễn đàn TTC hiện thời.
Hôm nay mình xin post một mini-guide GME về một vấn đề rất cơ bản, nhưng thường bị các GMU (Game Maker Users) bỏ qua. Đó là "Instance". Từ ngữ này chắc hẳn các GMU gặp khá nhiều trong các guide hay tip mà ko hiểu được nghĩa chính xác của nó.
Vậy, Instance là gì ? Có ăn đc ko ? :D
Điều chắc chắn là nó ko ăn được, và để hiểu được Instance là gì, thì trước tiên phải biết Object là gì.
Objects là các "vật thể" sẽ có mặt trong game, thực hiện các sự kiện riêng mà người lập trình giao phó cho. Ví dụ : Con quái , người chơi , viên đạn.
Ở hình trên, mình tạo ra 1 object có tên là "tao_la_object_day".
Về cơ bản, có những vật thể ko chỉ xuất hiện 1 lần. Ví dụ như object "tao_la_object_day" của mình là 1 con quái, và nó sẽ có mấy con trong map chứ ko phải một. Vậy chẳng nhẽ lại phải tạo thêm 4, 5 cái object tương tự sao ?
Không, trong cơ chế của GME, bạn có thể lặp lại 1 object nhiều lần trong 1 room. Mỗi lần lặp lại này đều tạo ra một bản sao. Những bản sao này được gọi là INSTANCE.
Chúng đều thừa hưởng những event của object gốc, nhưng hoạt động độc lập. Chúng cũng có ID riêng để GMU có thể đưa ra các lệnh chỉ định riêng.
Trong hình trên, mình tạo ra 6 con quái (instances) trong room. Nếu bạn đưa chuột vào con giữa như trong hình , bạn có thể xem được ID của instance này (ID = 100008)
Ví dụ mình muốn con quái ở giữa này di chuyển tới vị trí có tọa độ (123,456) mà các con khác vẫn đứng yên thì viết script sau
(100008).x = 123 ;
(100008).y = 456
Vì thế ta có thể thay đổi các biến của object có ID xxxxxx , ta sử dụng mẫu lệnh :(xxxxxx).<biến cần thay đổi> = <giá trị cần thay đổi>
NÂNG CAO :Một số lệnh mạnh hơn, sẽ giúp bạn khi muốn lấy ID của các instance :
- instance_exists(obj) : trả về giá trị true hay false về việc có instance nào của object mang tên "obj" tồn tại hay ko.
- instance_number(obj) : trả về số lượng instance của object mang tên "obj".
- instance_position(x,y,obj) : trả về ID của instance tạo ra từ "obj" và đang ở vị trí (x,y)
- instance_nearest(x,y,obj) , instance_furthest(x,y,obj) : lần lượt trả về ID của instance tạo ra từ "obj" và đang gần nhất / xa nhất so với mốc lấy ở vị trí (x,y)
- instance_create(x,y,obj) : tạo ra một instance từ object "obj" và đặt nó ở vị trí (x,y)
- instance_destroy() : phá hủy instance chứa lệnh này.
NÂNG CAO HƠN CHÚT NỮA :
Ví dụ 1 : Tôi muốn tạo ra 1 instance mới và lấy được ID của nó luôn.
Trả lời : Đây :
A = instance_create(123,456,object2)
A.speed = 100
A được gán luôn id của instance vừa được tạo ra theo lệnh. Ở đây, mình cho instance A này có tốc độ bằng 100. Các bạn nhớ lưu ý, khi này thì ta ko còn dùng dấu ngoặc để bọc ID nữa.Ví dụ 2 : Tôi muốn phá hủy 1 instance khác chứ ko phải instance đang viết script.
Trả lời : Đây :
(xxxxxx).instance_destroy()
A.instance_destroy()
Bạn cần làm cách nào đó để gán ID của instance cần phá hủy vào A , hay làm cách nào để có được ID chính xác của nó.Hết , mong rằng mini-guide này có ích cho các GMU nói chung và cộng đồng GMU TTC "mới vào" nói riêng. :D
Ơ ? Có cái spoiler kìa ??
Tagged:
Comments
Tuyệt cmn vời
tuyệt vãi cả gói xôi của a Khoa
nói chung là tuyệt..!!
Cái này có vẻ giống như Copy 1 cái event trong rpg maker rồi paste ra xung quanh nhỉ, về các thông số khác vẫn y nguyên, chỉ có ID + tọa độ là khác đi.
TUyệt vãi cả gói xôi của anh khoa )
Xôi của anh tuyệt là tất nhiên rồi
:dedoa::dedoa::dedoa:
THAM GIA GROUP CỦA TTC TRÊN FACEBOOK
Ai ăn rồi cho bài "Rì viu" Xôi của a Khoa đi ^^
viết là
with (A) instance_destroy();
hoặc
with A instance_destroy();
Bạn đùa mình chắc :D
Sao mình gõ vào nó vẫn works very well ?