Main Menu
  • Welcome to The RPG Maker Resource Kit.

Help with Win32API

Started by Abigaila, May 27, 2014, 06:30:01 PM

0 Members and 1 Guest are viewing this topic.

Abigaila

I have the following code:


@do_move = Win32API.new("ChessEngine.dll", "do_move", ['I','I'], "I")
@best_move = Win32API.new("ChessEngine.dll", "best_move", "", "L")

...

# Player move
@do_move.call(@from, @cursor)
refresh
         
# Computer move
@best_move.call()
refresh


@best_move is a function that can take quite long to execute, but @do_move is instant. I want the board to be redrawn after @do_move, before @best_move is called, but instead refresh doesn't seem to be run until after both Win32APIs are called.


TDS

From the looks of your code it would seem everything is called in a single frame which means that everything updates at once.

If you want a pause between @do_move and @before_best you need to add it in between.


@do_move = Win32API.new("ChessEngine.dll", "do_move", ['I','I'], "I")
@best_move = Win32API.new("ChessEngine.dll", "best_move", "", "L")

...

# Player move
@do_move.call(@from, @cursor)
refresh

# Wait 60 frames (Only the Graphics module is updated)
Graphics.wait(60)
         
# Computer move
@best_move.call()
refresh


Graphics.wait is not probably what you want, but you can visibly see a pause after @do_move. You will probably want to add your own wait method if things are moving or being animated on screen.

Abigaila

Quote from: TDS on May 27, 2014, 10:17:48 PM
From the looks of your code it would seem everything is called in a single frame which means that everything updates at once.

If you want a pause between @do_move and @before_best you need to add it in between.


@do_move = Win32API.new("ChessEngine.dll", "do_move", ['I','I'], "I")
@best_move = Win32API.new("ChessEngine.dll", "best_move", "", "L")

...

# Player move
@do_move.call(@from, @cursor)
refresh

# Wait 60 frames (Only the Graphics module is updated)
Graphics.wait(60)
         
# Computer move
@best_move.call()
refresh


Graphics.wait is not probably what you want, but you can visibly see a pause after @do_move. You will probably want to add your own wait method if things are moving or being animated on screen.

Ah, you're right.

I tried simply putting a Graphics.update between them and that worked. :D