External Resource cho GM

  • Thread starter Thread starter bullno1
  • Ngày gửi Ngày gửi

bullno1

Mr & Ms Pac-Man
Tham gia ngày
22/4/06
Bài viết
221
Reaction score
0
Nội dung: Hướng dẫn sử dụng file resource ngoài trong GameMaker
Đối tượng: Bác Konan vì bác ý bảo game bác ý sẽ vài trăm MB và ko thích người khác lấy trộm ảnh của mình. Đưa bác ý link cái hệ thống trong GM bác ý bảo hổng hiểu thế là bắt iem bỏ cơm làm cho cái example

Như chúng ta đã biết, 7zip http://www.7-zip.org/ là phần mềm nén rất tốt, có thể chạy từ dòng lệnh -> có thể bỏ resource vào một compressed archive kèm password sau đó extract ra khi cần.

Để chạy 7zip mà ko làm console window xuất hiện thì cần dùng một dll tên là run.dll down đc trên forum của gamemaker.

Thực hiện load external resource đơn giản như sau:
Tạo các script

XResource_init()
Mã:
//Khai báo sử dụng run.dll
global._Run=external_define("run.dll",'run',dll_cdecl,ty_string,4,ty_string,ty_string,ty_string,ty_string)

XResource_open()
Mã:
//Extract resources
//arg0:archive file
//arg1:password
//arg2:block program
if argument2
    Run(working_directory+'\7z.exe','x '+argument0+' -p'+argument1+' -y -o"'+temp_directory+'"',working_directory,'3')
    //Run(working_directory+'\7z.exe','x '+argument0+' -p'+argument1+' -y',working_directory,'0')

else
    Run(working_directory+'\7z.exe','x '+argument0+' -p'+argument1+' -y -o"'+temp_directory+'"',working_directory,'2')

Run():
Mã:
//arg0:prog to run
//Sử dụng run.dll để chạy chương trình mà ko làm console window xuất hiện
//arg1:parameters
//arg2:location
//arg3:flag

return external_call(global._Run,argument0,argument1,argument2,argument3)

XResource_destroy()
Mã:
Run('cmd.exe','/C "del /S /F /Q '+temp_directory+'"',working_directory,'2')// xóa hết resource
external_free('run.dll')//free cái dll

Cách dùng:
- Dùng một chương trình nén nào đó(7zip/winzip) đưa resource vào một archive có password. Chú ý là chỉ để mức compression thấp. Đổi đuôi lại thành .dat hay .pak hay gì đó để tránh bị nhòm ngó.
-2 file: 7z.exe và run.dll cùng thư mục với game hoặc file .gm6 hay .gmk

Sử dụng các script như sau:
Mã:
Sử dụng các script như sau:
[CODE]
XResource_init() //gọi một lần khi khởi động
XResource_open('test.dat','test',true)//mở pack
sound=sound_add(temp_directory+'\test.wma',3,false) //load sound
sound_play(sound)
XResource_destroy()//gọi cuối game để xóa hết resource

Nếu đổi true thành false trong Resource_open() thì sẽ lỗi. Vì sao? Bởi vì khi đó chương trình giải nén sẽ chạy song song với game . Nghĩa là chưa giải nén xong câu lệnh đã kết thúc, có thể resource chưa đc giải nén xong. Khi đó thì trong từng step phải kiểm tra xem file đã giải nén chưa rồi mới load. Cách này đc "REAL loading" trên GMC sử dụng. Bác Konan cố đọc mà hiểu, cũng đơn giản thôi, nó nằm trong script REAL_step().
Nếu để là true thì sẽ đơn giản, nhưng game sẽ dừng lại trong quá trình giải nén. Nếu archive lớn thì dừng sẽ khá lâu, nên vẽ chữ "loading" cho người dùng đỡ sốt ruột.
 
nghe hay quá , down về ko xài được là sao hả bull ? chạy thấy suond chưa attack ra , pó tay
 
XResource_init()//gọi 1 lần khi bắt đầu chương trình
XResource_open('test.dat','test',true) //extract resource trong file test.dat với password là test vào temp_directory
sound=sound_add(temp_directory+'\test.wma',3,false) // load file .wma đã extract
sound_play(sound) //nổi nhạc lên !!!!!
XResource_destroy() //xóa hết resource đc extract

Sửa nốt cái này cho đỡ nhầm
 
X( sao ko sửa ko file exam luôn , trời đất , rảnh ghê ta ơi .
 
::) 2 cái code ở trên , ở dưới và trong example giống nhau và game chạy thì sound chưa được load ????
 
Đã sửa code trong bài hướng dẫn. Cái script cuối viết trong tâm trạng buồn ngủ nên sai.

Example không có thời gian sửa, đang học thi. Bác chịu khó đọc hướng dẫn là đủ rồi.
 
:D bác đố em à , tự dưng đưa ra hướng dẫn , em làm theo y hệt rồi chạy ko được , giờ bác bảo em nghiên cứu thì em biết kêu ai bi giờ .
script sau khi sửa cũng giống ý hệt như cái ở dưới , chả khác gì cả . pó tay thiệt rồi , bác còn link bài viết thì share em tự nghiên cứu =((
 
Sửa rồi, bài viết làm gì có link nào, chính tui viết chứ ai. Hướng dẫn sửa rồi, làm theo là đc
 
Back
Top