Hướng dẫn các bạn Play Movie trong RPGXP

Thảo luận trong 'Game Development' bắt đầu bởi >VoDich<, 20/4/05.

  1. >VoDich<

    >VoDich< Legend of Zelda

    Tham gia ngày:
    26/1/05
    Bài viết:
    919
    Nơi ở:
    Can Tho
    hổm rày có bạn hỏi, hôm nay đi dạo thấy bí kíp nên về truyền lại
    mới thử với file mpg thui, mấy loại khác chưa thử.
    cách 1: (chôm)
    vào thư mục chứa project, tạo 1 folder mới chứa movie, name gì tùy, thí dụ là movie. sau đó mở project ra tạo 1 event, trong đó chọn call script (bảng event thứ 3) rùi gõ đoạn code này vào
    Audio.se_play("tên folder chứa file movie/name_of_your_file.MPG", 100, 100)
    nhìn hiểu rùi chứ, nếu là Audio.se_play() hoặc Audio.me_play() thì movie sau khi hết sẽ ko lặp lại
    còn nếu là Audio.bgm_play() hoặc Audio.bgs_play() thì movie sau khi hết sẽ lặp lại.
    chuyện này là do loại bgm và bgs là nhạc nền, nó sẽ lặp lại hoài, còn se với me là hiệu ứng âm thanh gì đó nên ko lặp lại nhìu lần. tuy nhiên cách này sau khi complie thì file movie ko được bảo vệ, ai muốn xem trước thì xem. ko hay lắm
    cách 2: (tự chế)
    thấy làm vậy mắc công wá, làm vầy nhanh hơn nè, lại có thể bảo mật file movie. bây giờ, vào control panel, chọn folder Option (WinXP mấy OS khác ko rành :D). bấm qua thể View bỏ chọn hide extention for know file type. Xong việc đầu, bi giờ lôi cái file movie ra, bi giờ nó có dạng *.mpg, đổi cái đuôi mpg thành *.wma (tí nữa sẽ hiểu nãy giờ mình đang làm cái gì). vào Database, chọn Audio/SE hoặc Audio/ME. sau đó import cái file movie hồi này vào. Vì SE và ME chỉ cho phép các dạng file có đuôi *.mid,*.ogg,*.wma,*.mp3,*.wav nên mình ko thể import file movie dzô được, mún import dô phải đổi tên đuôi, hiểu rùi chứ. import xong, tạo New Event, Insert, chọn bảng thứ 2, chọn Play SE hoặc Play ME (tùy hồi nãy bạn import vô chỗ nèo), sau đó chọn tên file movie hồi nãy mới import, xong ok. phần Trigger tùy bạn chọn.
    vậy là xong có thể play movie rùi đó. tuy nhiên tin đó là tin vui, còn đây là tin bùn:
    + movie sẽ được play trong 1 window khác --> ::(
    + sau khi nó play xong, nếu người chơi ko tự tắt window đó đi thì nó còn hoài--> ::(
    2 vấn đề đó quả thật khó khăn, ai tìm cách nào giải quyết đựơc xin cho ý kiến
     
  2. SVS

    SVS Mario & Luigi

    Tham gia ngày:
    27/6/03
    Bài viết:
    899
    Nơi ở:
    Graveyard of rusted uses
    Hướng dẫn vậy thì nói làm gì? T_T muốn play movie thẳng trong game theo kiểu của Rpg 2K3 cơ! T_T ... nếu ông có scrips thì share cho anh em!
     
  3. >VoDich<

    >VoDich< Legend of Zelda

    Tham gia ngày:
    26/1/05
    Bài viết:
    919
    Nơi ở:
    Can Tho
    ko có cánh nào nữa đâu, tui vặn nát óc rùi, đó là theo ý tui, chắc còn cao nhân khác, vậy chứ nhóm VM chưa làm được à, thế sao này sao mà play phim đây
     
  4. zubachi

    zubachi Donkey Kong

    Tham gia ngày:
    5/11/04
    Bài viết:
    301
    Nơi ở:
    Tây phương
    1. Cái kách của chú ken nó đã thử từ đời tám hoánh nào roài. Nếu được thì không việc gì thiên hạ phải khổ sở nữa.

    2. Chú làm ơn tắt cái sig tổ chảng dzùm cái. Quy định nơi này không cho xài đâu.
     
  5. Alone Beast

    Alone Beast C O N T R A

    Tham gia ngày:
    14/1/04
    Bài viết:
    1,607
    Nơi ở:
    ...
    VM làm được rồi , nhưng ( trong vòng bí mật ) nên ken ko tiết lộ ra ngoài :)) Tất nhiên cách của VoDich cũng là 1 cách , nhưng thế thì có mà ... vái .
    Ngoài script ra ko có cách nào khác , mà nếu có ( nếu thôi nhé ) là làm cách nào đó phá tung cái 2k3ra rồi kết hợp với xp ( tôi biết 1 ông dở hơi đã thử làm cách này , và rồi thì cái game ổng làm thành movie hết luôn , engine mới tạo thành cũng tan tành ngay sau lần chạy thử đầu tiên T_____T )
     
  6. >VoDich<

    >VoDich< Legend of Zelda

    Tham gia ngày:
    26/1/05
    Bài viết:
    919
    Nơi ở:
    Can Tho
    i found a script in somewhere for every people

    class Scene_Movie

    def initialize(movie,length)
    @movie_name = Dir.getwd()+"\\Movies\\"+movie+".avi"
    @counter = length
    end

    def main

    Graphics.transition
    @wnd = Win32API.new('user32','FindWindowEx','%w(l,l,p,p)','L')
    @temp = @wnd.call(0,0,nil,"Pokemon").to_s
    @movie = Win32API.new('winmm','mciSendString','%w(p,p,l,l)','V')
    @movie.call("open \""+@movie_name+"\" alias FILE style 1073741824 parent " + @temp.to_s,0,0,0)
    @movie.call("play FILE",0,0,0)

    loop do
    Graphics.update
    sleep(1)
    Input.update
    if Input.trigger?(Input::
    break
    end
    @counter = @counter - 1
    if @counter == 0
    break
    end
    end
    @movie.call("close FILE",0,0,0)
    $scene = Scene_Map.new
    Graphics.freeze
    end
    end
     
  7. finalfantasy9

    finalfantasy9 Mr & Ms Pac-Man

    Tham gia ngày:
    25/1/05
    Bài viết:
    205
    _Cái gì thíabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
     
  8. ken10

    ken10 Programmer

    Tham gia ngày:
    10/1/04
    Bài viết:
    2,341
    Nơi ở:
    Ho Chi Minh city
    _Mai mốt Vô_địch nhớ thêm lệnh nhé .Vì nếu không khi copy vào RPGmakerXP hoặc 1 engine khác ứng dụng được .Nó báo sai cấu trúc thì rối mắt lắm.

    _Cái script kia báo lỗi ở đoạn
    Ông xem lại đi
     
  9. Alone Beast

    Alone Beast C O N T R A

    Tham gia ngày:
    14/1/04
    Bài viết:
    1,607
    Nơi ở:
    ...
    [QUOTE\=>VoDich<] @counter = @counter - 1
    if @counter == 0
    break
    end
    end
    @movie.call("close FILE",0,0,0)
    $scene = Scene_Map.new
    Graphics.freeze
    end
    end
    [/QUOTE]

    Theo tôi thì có thể sai ở câu lệnh hoặc đơn giản hơn là sai ở chỗ tester chưa lập 1 folder Movie trong Project .
    Ai đó thử lại xem :D
     
  10. >VoDich<

    >VoDich< Legend of Zelda

    Tham gia ngày:
    26/1/05
    Bài viết:
    919
    Nơi ở:
    Can Tho
    Thân tặng VM và các mem của box RPG Maker đọan script play movie
    chú ý: chỉ thành công khi game chạy ở chế độ fullscreen
    tạo 1 class mới trong script editor đặt tên là Scene_Movie
    copy đọan script sau
    #begin
    class Scene_Movie

    def initialize(movie,length)
    @movie_name = Dir.getwd()+"\\Movies\\"+movie+".mpg" # trong đó Movies là folder chứa file phim, phải ở cùng với folder chứa game, ".mpg" là lọai file phim( có thể thay đổi tùy bạn)
    @counter = length
    end

    def main

    Graphics.transition
    @wnd = Win32API.new('user32','FindWindowEx','%w(l,l,p,p)','L')
    @temp = @wnd.call(0,0,nil,"MovieTest").to_s # MovieTest thay bằng tên game của bạn (hiển thị trên Title bar khi run game)
    $game_actors[1].name = @temp.to_s
    @movie = Win32API.new('winmm','mciSendString','%w(p,p,l,l)','V')
    @movie.call("open \""+@movie_name+"\" alias FILE style 1073741824 parent " + @temp.to_s,0,0,0)
    @movie.call("play FILE",0,0,0)
    loop do
    Graphics.update
    sleep(1)
    Input.update
    if Input.trigger?(Input::B)
    break
    end
    @counter = @counter - 1
    if @counter == 0
    break
    end
    end
    @movie.call("close FILE",0,0,0)
    $scene = Scene_Map.new
    Graphics.freeze
    end
    end
    #end

    Xong phần script, để play thì call script sau:

    $scene = Scene_Movie.new("movie",12)

    với movie là tên file phim, ko được gõ tên đuôi vào, còn 12 là số giây mà bạn muốn file phim play
    vì vậy trước khi play cần xem kĩ file phim đó play trong bao lâu để mình chỉnh cho đúng.
    Have Fun!
    chúc thành công, ken10 + tí EXP nào, wên cho tôi thêm link down game hen đi :D :D
     
  11. zubachi

    zubachi Donkey Kong

    Tham gia ngày:
    5/11/04
    Bài viết:
    301
    Nơi ở:
    Tây phương
    Nói chung vấn đề play movie rất là nan giải. Đi theo hướng MCI này là cách dễ nhất. Tuy nhiên, như đã bàn trong phần dùng DLL với RPG maker XP, nếu engine RGSS không gọi hàm Graphics.update trong vòng 3 giây thì nó sẽ tự động kết thúc game để tránh hiện tượng mất texture. Điều này gây khó dễ nếu muốn game đi vào fullscreen.

    Gọi hàm MCI tuy làm được nhưng không an toàn và đảm bảo cho lắm đối với RPG maker XP.

    Cách làm hiệu quả nhất bây giờ là dùng FrameGrabber trong DirectShow tách từng frame một rồi lưu dạng bmp. Vừa tách frame mới, vừa xoá frame cũ. Trong khi đó thì engine RGSS kia sẽ load bmp và play. Phần âm thanh thì tách riêng ra một stream khác. Nghe dễ nhưng cũng khoai lắm T__T.

    @A-lông: đừng có nổ nữa.
     
  12. ken10

    ken10 Programmer

    Tham gia ngày:
    10/1/04
    Bài viết:
    2,341
    Nơi ở:
    Ho Chi Minh city
    -_- Vô_địch mai mốt nhớ thêm lệnh [ QUOTE] và [/ QUOTE] nhé .Để copy cho nó đúng cấu trúc cái.

    _Tui thử đã,mới vừa ngủ dzậy còn lơ mơ.


    _Dù sao cũng cám ơn Vô_Địch đã giúp đỡ VM .Để tui thử đã


    _Không play được lúc nó transition xong rồi màn hình đen lun.

    _Cái Folder Movies để cùng với cái Game.exe hay trong thư mục Audio vậy.
     
  13. >VoDich<

    >VoDich< Legend of Zelda

    Tham gia ngày:
    26/1/05
    Bài viết:
    919
    Nơi ở:
    Can Tho
    phải để fullscreen mới play được, lúc test thì bấm alt-Enter để hiển thị fullscreen
    script này xài hàm API có sẵn hook cửa sổ nào có title là MovieTest (bởi vậy phải đổi tên title của game bạn trong script đó mới được), rùi play movie đã chọn lên cửa sổ đó, nếu thích làm cái này cũng dzui lắm nè chỗ MovieTest gõ
    Recycle Bin, sau đó bật cửa sổ thùng rác lên, đừng chạy fullscreen, play movie, rùi chuyển wa cửa sổ thùng rác xem phim he he.
    ai biết thì cùng tìm cách sửa chữa để nó tự stretch và ko cần run ở fullscreen đi. thanks.
    à, mà theo lời ken đóa, để lệnh [ QUOTE] có tính mp ko nếu ko tính tui ko để đâu nha.
    theo script folder là "movies" đặt cùng folder với file game.exe
    tui có gửi kèm theo example, có luôn ATB battle system. (file kèm ko có file phim nhá, mún test thì kiếm đại file *.mpg nèo đó, đặt tên movietest, wăng vô thư mục movies).
    Mà này battle system game của VM có dạng ra sao vậy, cho xem hình cái được ko.
     

    Các file đính kèm:

  14. Tìnhyêu36kế

    Tìnhyêu36kế C O N T R A

    Tham gia ngày:
    22/11/05
    Bài viết:
    1,653
    Nơi ở:
    ☆ Deep River
    ủa! cái demo thì xài được nhưng mà cái scpirts gắn vào thì em làm không được, cứ đến even movie thì tự dưng nó thoát ra ngoài!
     

Chia sẻ trang này