External Resource cho GM

Thảo luận trong 'Game Development' bắt đầu bởi bullno1, 30/6/07.

  1. bullno1

    bullno1 Mr & Ms Pac-Man

    Tham gia ngày:
    22/4/06
    Bài viết:
    221
    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.
     
  2. XxKonanxX

    XxKonanxX Mario & Luigi

    Tham gia ngày:
    27/12/05
    Bài viết:
    883
    Nơi ở:
    _Rune Midgart_
    nghe hay quá , down về ko xài được là sao hả bull ? chạy thấy suond chưa attack ra , pó tay
     
  3. bullno1

    bullno1 Mr & Ms Pac-Man

    Tham gia ngày:
    22/4/06
    Bài viết:
    221
    Sửa nốt cái này cho đỡ nhầm
     
  4. XxKonanxX

    XxKonanxX Mario & Luigi

    Tham gia ngày:
    27/12/05
    Bài viết:
    883
    Nơi ở:
    _Rune Midgart_
    X( sao ko sửa ko file exam luôn , trời đất , rảnh ghê ta ơi .
     
  5. XxKonanxX

    XxKonanxX Mario & Luigi

    Tham gia ngày:
    27/12/05
    Bài viết:
    883
    Nơi ở:
    _Rune Midgart_
    ::) 2 cái code ở trên , ở dưới và trong example giống nhau và game chạy thì sound chưa được load ????
     
  6. bullno1

    bullno1 Mr & Ms Pac-Man

    Tham gia ngày:
    22/4/06
    Bài viết:
    221
    Đã 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.
     
  7. XxKonanxX

    XxKonanxX Mario & Luigi

    Tham gia ngày:
    27/12/05
    Bài viết:
    883
    Nơi ở:
    _Rune Midgart_
    :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 =((
     
  8. bullno1

    bullno1 Mr & Ms Pac-Man

    Tham gia ngày:
    22/4/06
    Bài viết:
    221
    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
     

Chia sẻ trang này