C++ trong rpg maker xp... Sự thật hay trò đùa ?

Thảo luận trong 'Game Development' bắt đầu bởi Atachi, 1/8/05.

Trạng thái chủ đề:
Không mở trả lời sau này.
  1. Atachi

    Atachi The Boy From Nowhere

    Tham gia ngày:
    6/1/05
    Bài viết:
    9,993
    Nơi ở:
    Sunset Boulevard
    Nghe mọi người tranh cãi việc ứng dụng C++ vào rpg maker xp, tôi lúc đầu nghĩ ngay đó là trò đùa, hỏi các tiền bối đều bảo là không đưọc, trong khi mấy ông VM lại bảo được. Cuối cùng thì là sao đây nhỉ ? :whew:
     
  2. DevVn

    DevVn The Warrior of Light

    Tham gia ngày:
    4/6/05
    Bài viết:
    2,074
    Nơi ở:
    Damned Graveyard
    Đó là sự thật. chỉ có không ai biết cách làm mà thôi. Nếu ông vào một số trang nước ngoài thì thấy nó là bình thường.
     
  3. Ice Dragon

    Ice Dragon Mega Man

    Tham gia ngày:
    6/9/04
    Bài viết:
    3,101
    Nơi ở:
    none
  4. Guardian-Angel

    Guardian-Angel Youtube Master Race

    Tham gia ngày:
    20/6/05
    Bài viết:
    54
    chắc như gamemaker vậy, dùng ngôn ngữ khác tạo file thư viện dll rùi dùng command điều khiển file đó, ko biết RPGXP có command đó ko.
     
  5. dekarvn

    dekarvn Donkey Kong

    Tham gia ngày:
    23/1/05
    Bài viết:
    369
    Nơi ở:
    Law City of Zenebatos
    À không phải như vậy, ngôn ngữ RGSS căn bản giống hệt C++ nên mọi người nghĩ C++ có thể dùng đuợc trong RMXP mà thôi. Syntax của C++ có thể sử dụng được trong RGSS một cách đơn giản như script bình thường đó mà
     
  6. Asakura Yoh

    Asakura Yoh Dragon Quest

    Tham gia ngày:
    2/8/03
    Bài viết:
    1,413
    Nơi ở:
    Santa Cruz
    Dùng lệnh từ các DLL như lúc dùng để load Movie ;) Khi đó thì nhúng cái gì vào mà chả được? Đâu cứ nhất thiết phải là C++ mà có khi Visual Basic,...đều nhúng được...
    Ah nhưng mà nếu nhúng C++ dạng code (chưa compile) thì sẽ làm RPG Maker chạy hơi chậm (vì còn phải compile) ;) Cách hay nhất là cứ viết bằng C++ 1 file DLL trước rồi sau đó dùng RPG Maker gọi lệnh ra...
     
  7. dekarvn

    dekarvn Donkey Kong

    Tham gia ngày:
    23/1/05
    Bài viết:
    369
    Nơi ở:
    Law City of Zenebatos
    thực ra thì tạo thư viện dll cũng là 1 cách hay nhưng cái đó cực kỳ dễ bị mắc lỗi (dù đã compile) lỗi chủ yếu là conflict giữa rmxp và mấy cái thư viện dll đó. đồng thời vì nó đã ở dạng dll rồi nên rất khó debug
     
  8. Ice Dragon

    Ice Dragon Mega Man

    Tham gia ngày:
    6/9/04
    Bài viết:
    3,101
    Nơi ở:
    none
    ^_^ -_- T_T
    Hiểu chết liền đ1o ^_^
     
  9. Asakura Yoh

    Asakura Yoh Dragon Quest

    Tham gia ngày:
    2/8/03
    Bài viết:
    1,413
    Nơi ở:
    Santa Cruz
    devkar: conflict cái gì? ;)
    Ice Dragon: U biết cách mở movie ra bằng RPG Maker XP chứ gì? Vậy thì U cũng có thể dùng cách tương tự để mở/dùng bất kỳ các lệnh gì trong các file DLL khác chứ nhỉ? ;) Nói vậy mà không hiểu nữa thì...bó tay...
     
  10. dekarvn

    dekarvn Donkey Kong

    Tham gia ngày:
    23/1/05
    Bài viết:
    369
    Nơi ở:
    Law City of Zenebatos
    RMXP có dll riêng (cái rgss.dll đó) 1 số mấy thứ trong đó conflict và gây ra 1 đống lỗi trong project của tui khi tui cố chèn 1 thư viện C++ vào.
    Ví dụ như tui cố đưa cái iostream vào để có thể sử dụng lệnh cout, cin chẳng hạn ...
     
  11. Ice Dragon

    Ice Dragon Mega Man

    Tham gia ngày:
    6/9/04
    Bài viết:
    3,101
    Nơi ở:
    none
    Để tui xem lại xem,đó giờ không quan tâm mấy đến movie ^_^
    if Len(post#11)<15 then
    Ice'sExp = Ice'sExp - 2
    Ice'sMp = Ice'sMp -1
    end if
     
  12. Guardian-Angel

    Guardian-Angel Youtube Master Race

    Tham gia ngày:
    20/6/05
    Bài viết:
    54
    nói nhìu mỏi miệng ý wên mỏi tay, cho cái ex đê khà khà
     
  13. zubachi

    zubachi Donkey Kong

    Tham gia ngày:
    5/11/04
    Bài viết:
    301
    Nơi ở:
    Tây phương
    Tôi có post một bài về xử dụng DLL dạng thô (không phải ATL hay COM gì hết) với RPG maker XP. Bên trang "trưng bày" của Thảo luận chung. Ai rãnh vô đọc.

    Chuyện này cũng có những hạn chế nhất định, nói chung tôi nghĩ không có nhiều giá trị.
     
  14. zubachi

    zubachi Donkey Kong

    Tham gia ngày:
    5/11/04
    Bài viết:
    301
    Nơi ở:
    Tây phương
    Mà quên, nếu RPG maker XP chưa update không thể chạy DLL được.
     
  15. Asakura Yoh

    Asakura Yoh Dragon Quest

    Tham gia ngày:
    2/8/03
    Bài viết:
    1,413
    Nơi ở:
    Santa Cruz
    Tip: nếu dùng C++ hay "cái gì đó" tạo DLL mà khi cho vào RPG Maker XP bị conflict thì hãy sửa lại các lệnh trong DLL cho dài ra thí dụ như:
    write đổi thành writethisinto ;)
    Cũng có khi phải sửa luôn cả tên của các Class... cho dài ra
    Tui chỉ bị lỗi conflict lệnh (vì RGSS là 1 DLL có chứa hơi nhiều lệnh của Ruby nênh có thể sẽ conflict với các DLL có chứa các câu lệnh chung chung như if, else,...)
     
  16. dekarvn

    dekarvn Donkey Kong

    Tham gia ngày:
    23/1/05
    Bài viết:
    369
    Nơi ở:
    Law City of Zenebatos
    uh đúng rồi, tại sao lại lạ thế nhỉ, tui cho tên dài ra là chạy được, nhưng nếu dài quá ví dụ như write thành writeoutcommandnamedealingdamage0 là khỏi chạy luôn .... conflict tiếp
     
  17. Asakura Yoh

    Asakura Yoh Dragon Quest

    Tham gia ngày:
    2/8/03
    Bài viết:
    1,413
    Nơi ở:
    Santa Cruz
    tip2: lệnh quá dài thì không tốt :D Lý do: thí dụ có lệnh ABC đi, vậy thì máy sẽ đoán là sẽ có lệnh BBC, CBC,... nên sẽ chừa chỗ ra và như vậy thì...ui chà...hơi nhiều đó...nói chung kéo dài lệnh ra nhưng mà đừng dài quá ^_^
     
  18. Ice Dragon

    Ice Dragon Mega Man

    Tham gia ngày:
    6/9/04
    Bài viết:
    3,101
    Nơi ở:
    none
    Ai cho hỏi cái script movie đâu rồi ?(hic,mod làm ăn ngon lành thiệt,mấy topic vớ vẩn như Program Team thì đặt chú ý còn mấy cái như Hướng dẫn này kia thì vất mất tiêu(ít ra cũng nên nhập vào 1 chủ đề HD nào chứ)
    Có ai nói rõ vụ chèn file DLL 1 chút ko? Tui định thứ bằng VB
     
  19. dekarvn

    dekarvn Donkey Kong

    Tham gia ngày:
    23/1/05
    Bài viết:
    369
    Nơi ở:
    Law City of Zenebatos
    Mình cũng có thể chạy được phim trong rmxp mà không cần phải gọi vào lằng nhằng thế đâu:

    Dùng lệnh Scene_Movie.new(filename,length) để gọi nó vào nhé
    Filename là tên phim để trong (yourgame\data, yourgame\graphics, yourgame\movies) resolution không vượt quá 640*480. ko hoạt động trên cả cái 640*48, chỉ có thể nhỏ hơn.
    Length là độ dài của film tính trên giây

    DEMO

    Mã:
    class Scene_Movie
    
    def initialize(movie,length)
      @readini = Win32API.new 'kernel32', 'GetPrivateProfileStringA', %w(p p p p l p), 'l'
      @movie_name = Dir.getwd()+"\\Movies\\"+movie+".avi"
      @counter = length*10
      main
    end
    
    def main
    
      game_name = "\0" * 256
      @readini.call('Game','Title','',game_name,255,".\\Game.ini")
      game_name.delete!("\0")
      @wnd = Win32API.new('user32','FindWindowEx','%w(l,l,p,p)','L')
      @temp = @wnd.call(0,0,nil,game_name).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)
      @message = Win32API.new('user32','SendMessage','%w(l,l,l,l)','V')
     
      @detector = Win32API.new('user32','GetSystemMetrics','%w(l)','L')
      @width = @detector.call(0)
      if @width == 640
        fullscreen
        Graphics.update
        sleep(1)
        Graphics.update
        sleep(1)
        Graphics.update
        sleep(1)
      end
     
      @movie.call("play FILE",0,0,0)
      loop do
       sleep(0.1)
       @message.call(@temp.to_i,11,0,0)
       Graphics.update
       @message.call(@temp.to_i,11,1,0)
       Input.update
       if Input.trigger?(Input::B)
         Input.update
         break
       end
       @counter = @counter - 1
       if @counter <= 0
         break
        end
      end
      @movie.call("close FILE",0,0,0)
      bail
    end
    
    def bail
      if @width == 640
        fullscreen
      end
     end
    end
    
    def fullscreen()
    
    $full.call(18,0,0,0)
    $full.call(13,0,0,0)
    $full.call(18,0,2,0)
    $full.call(13,0,2,0)
    end
    $full = Win32API.new('user32','keybd_event','%w(l,l,l,l)','')
    
     
  20. Asakura Yoh

    Asakura Yoh Dragon Quest

    Tham gia ngày:
    2/8/03
    Bài viết:
    1,413
    Nơi ở:
    Santa Cruz
    Kỳ nhở? :)) Nếu đã gọi như vậy rồi thì sao không thêm cái hàm Autoresize đi (Windows Media Player làm vậy được) tui nghe nói có người làm vậy để chèn các phim có độ phân giải lớn hơn 640x480 vào (hình ảnh đẹp hơn nếu có kèm theo D3D Filter) nhưng chưa thử vì...không biết :P
    Edit: thật ra việc gọi Movie hay hầu hết mọi thứ đều thông qua Kernel hay API thôi...mấy video cỡ bink mới cần gọi từ dll riêng...
     
Trạng thái chủ đề:
Không mở trả lời sau này.

Chia sẻ trang này