Page 1 sur 2 • 1, 2
Diriger le hero a la souris
Lun 19 Mai 2008 - 21:02
Suite a une commande d'un membre... bon ce n'etait pas ca ce qu'il souhaitait, mais je me suis dit que ca pouvait etre utile a plus d'un !
a placer au dessus de main, dans l'ordre:
a placer au dessus de main, dans l'ordre:
- Spoiler:
- Code:
#===========================================
# Module Keyboard/Mouse
# par SephirothSpawn
#===========================================
#===============================================================
#
# rpgmakervx.1fr1.net
#
#===============================================================
module Keyboard
@keys = []
@pressed = []
Mouse_Left = 1
Mouse_Right = 2
State = Win32API.new("user32","GetKeyState",['i'],'i')
Key = Win32API.new("user32","GetAsyncKeyState",['i'],'i')
def Keyboard.getstate(key)
return true unless State.call(key).between?(0, 1)
return false
end
def Keyboard.testkey(key)
Key.call(key) & 0x01 == 1
end
def Keyboard.update
@keys = []
@keys.push(Keyboard::Mouse_Left) if Keyboard.testkey(Keyboard::Mouse_Left)
@keys.push(Keyboard::Mouse_Right) if Keyboard.testkey(Keyboard::Mouse_Right)
@pressed = []
@pressed.push(Keyboard::Mouse_Left) if Keyboard.getstate(Keyboard::Mouse_Left)
@pressed.push(Keyboard::Mouse_Right) if Keyboard.getstate(Keyboard::Mouse_Right)
end
def Keyboard.trigger?(key)
return true if @keys.include?(key)
return false
end
def Keyboard.pressed?(key)
return true if @pressed.include?(key)
return false
end
end
class Mouse
@mouse_menu = 0
def click?(button)
return true if @keys.include?(button)
return false
end
def press?(button)
return true if @press.include?(button)
return false
end
def area?(x, y, width=32, height=32)
return false if @pos == nil
return true if @pos[0] >= x and @pos[0] <= (x+width) and @pos[1] >= y and @pos[1] <= (y+height)
return false
end
def pixels
return @pos == nil ? [0, 0] : @pos
end
def tiles
return nil if @pos == nil
x = @pos[0] / 32
y = @pos[1] / 32
return [x, y]
end
def set_pos(x_pos=0, y_pos=0)
width, height = client_size
if (x_pos.between?(0, width) && y_pos.between?(0, height))
x = $mouse.client_pos[0] + x_pos; y = $mouse.client_pos[1] + y_pos
Win32API.new('user32', 'SetCursorPos', 'NN', 'N').call(x, y)
end
end
def update
@pos = $mouse.pos
@keys, @press = [], []
@keys.push(1) if Win32API.new("user32","GetAsyncKeyState",['i'],'i').call(1) & 0X01 == 1
@keys.push(2) if Win32API.new("user32","GetAsyncKeyState",['i'],'i').call(2) & 0X01 == 1
@keys.push(3) if Win32API.new("user32","GetAsyncKeyState",['i'],'i').call(4) & 0X01 == 1
@press.push(1) if Win32API.new("user32","GetKeyState",['i'],'i').call(1) & 0X01 == 1
@press.push(2) if Win32API.new("user32","GetKeyState",['i'],'i').call(2) & 0X01 == 1
@press.push(3) if Win32API.new("user32","GetKeyState",['i'],'i').call(4) & 0X01 == 1
end
def global_pos
pos = [0, 0].pack('ll')
if Win32API.new('user32', 'GetCursorPos', 'p', 'i').call(pos) != 0
return pos.unpack('ll')
else
return nil
end
end
def pos
@x, @y = screen_to_client(*global_pos)
width, height = @width,@height
if @x ==nil or @y== nil
return 0,0
end
if (@x >= 0 and @y >= 0)
@x = @x==nil ? 0 : @x
@y = @y==nil ? 0 : @y
return @x, @y
else
return 0,0
end
end
def screen_to_client(x, y)
return nil unless x and y
pos = [x, y].pack('ll')
if Win32API.new('user32', 'ScreenToClient', %w(l p), 'i').call(hwnd, pos) != 0
return pos.unpack('ll')
else
return nil
end
end
def hwnd
game_name = "\0" * 256
Win32API.new('kernel32', 'GetPrivateProfileStringA', %w(p p p p l p), 'l').call('Game','Title','',game_name,255,".\\Game.ini")
game_name.delete!("\0")
return Win32API.new('user32', 'FindWindowA', %w(p p), 'l').call('RGSS Player',game_name)
end
def client_size
rect = [0, 0, 0, 0].pack('l4')
Win32API.new('user32', 'GetClientRect', %w(l p), 'i').call(hwnd, rect)
right, bottom = rect.unpack('l4')[2..3]
return right, bottom
end
def client_pos
rect = [0, 0, 0, 0].pack('l4')
Win32API.new('user32', 'GetWindowRect', %w(l p), 'i').call(hwnd, rect)
left, upper = rect.unpack('l4')[0..1]
return left+4, upper+30
end
def grid
return nil if @pos == nil
offsetx = $game_map.display_x / 8
offsety = $game_map.display_y / 8
x = (@pos[0] + offsetx) / 32
y = (@pos[1] + offsety) / 32
return [x, y]
end
end
- Spoiler:
- Code:
#===========================================
# Pathfinding
# par SephirothSpawn
#===========================================
class Game_Character
alias nf_pf_game_character_initialize initialize
alias nf_pf_game_character_update update
attr_accessor :map
attr_accessor :runpath
def initialize
nf_pf_game_character_initialize
@map = nil
@runpath = false
end
def update
run_path if @runpath == true
nf_pf_game_character_update
end
def run_path
return if moving?
step = @map[@x,@y]
if step == 1
@map = nil
@runpath = false
return
end
dir = rand(2)
case dir
when 0
move_right if @map[@x+1,@y] == step - 1 and step != 0
move_down if @map[@x,@y+1] == step - 1 and step != 0
move_left if @map[@x-1,@y] == step -1 and step != 0
move_up if @map[@x,@y-1] == step - 1 and step != 0
when 1
move_up if @map[@x,@y-1] == step - 1 and step != 0
move_left if @map[@x-1,@y] == step -1 and step != 0
move_down if @map[@x,@y+1] == step - 1 and step != 0
move_right if @map[@x+1,@y] == step - 1 and step != 0
end
end
def find_path(x,y)
sx, sy = @x, @y
result = setup_map(sx,sy,x,y)
@runpath = result[0]
@map = result[1]
@map[sx,sy] = result[2] if result[2] != nil
end
def clear_path
@map = nil
@runpath = false
end
def setup_map(sx,sy,ex,ey)
map = Table.new($game_map.width, $game_map.height)
map[ex,ey] = 1
old_positions = []
new_positions = []
old_positions.push([ex, ey])
depth = 2
depth.upto(100){|step|
loop do
break if old_positions[0] == nil
x,y = old_positions.shift
return [true, map, step] if x == sx and y+1 == sy
if $game_player.passable?(x, y) and map[x,y + 1] == 0
map[x,y + 1] = step
new_positions.push([x,y + 1])
end
return [true, map, step] if x-1 == sx and y == sy
if $game_player.passable?(x, y) and map[x - 1,y] == 0
map[x - 1,y] = step
new_positions.push([x - 1,y])
end
return [true, map, step] if x+1 == sx and y == sy
if $game_player.passable?(x, y) and map[x + 1,y] == 0
map[x + 1,y] = step
new_positions.push([x + 1,y])
end
return [true, map, step] if x == sx and y-1 == sy
if $game_player.passable?(x, y) and map[x,y - 1] == 0
map[x,y - 1] = step
new_positions.push([x,y - 1])
end
end
old_positions = new_positions
new_positions = []
}
return [false, nil, nil]
end
end
class Game_Map
alias pf_game_map_setup setup
def setup(map_id)
pf_game_map_setup(map_id)
$game_player.clear_path
end
end
- Spoiler:
- Code:
#===========================================
# Mouvement par souris
# par berka
#===========================================
#
# clic gauche: definir le point d'arrivée
# clic droit: suivre/ne pas suivre le héros
# touche directionnelles: deplacer la map
#===========================================
Vitesse = 8 #vitesse du scroll de la map
$mouse = Mouse.new
class Scene_Map
alias scroll_update update
def update
Keyboard.update
$mouse.update
if Keyboard.trigger?(Keyboard::Mouse_Left)
$game_player.find_path($mouse.grid[0], $mouse.grid[1])
end
scroll_update
end
end
class Game_Player < Game_Character
alias scroll_init initialize
def initialize
scroll_init
@scroll = false
end
def update
last_real_x = @real_x
last_real_y = @real_y
last_moving = moving?
move_by_input
super
if Keyboard.trigger?(Keyboard::Mouse_Right)
if @scroll == false
$game_player.center($game_player.x, $game_player.y)
@scroll = true
else
@scroll = false
end
end
@scroll = false if Input.dir4 != 0
$game_player.update_scroll(last_real_x, last_real_y) if @scroll == true
update_vehicle
update_nonmoving(last_moving)
end
def move_by_input
return unless movable?
return if $game_map.interpreter.running?
case Input.dir4
when 2; $game_map.start_scroll(2, 1, Vitesse)
when 4; $game_map.start_scroll(4, 1, Vitesse)
when 6; $game_map.start_scroll(6, 1, Vitesse)
when 8; $game_map.start_scroll(8, 1, Vitesse)
end
end
end
- GummyStaffeux retraité
- Nombre de messages : 2666
Age : 33
Localisation : Belgique
Distinction : Modérateur imprévisible
Papy Lolo' [Nabots Nimousse]
Date d'inscription : 27/01/2008
Re: Diriger le hero a la souris
Mer 21 Mai 2008 - 14:32
Si c'est bien pour VX, merci beaucoup Berka!
- bahamutMembre
- Nombre de messages : 434
Age : 35
Localisation : avec mon crayon :love:
Distinction : aucune
Date d'inscription : 19/03/2008
Re: Diriger le hero a la souris
Mer 21 Mai 2008 - 16:38
Je l' ai testé!
Mais Berka tu es ...tu es...;génial y a pas d' autres mots
Mais Berka tu es ...tu es...;génial y a pas d' autres mots
- NaasmarMembre
- Nombre de messages : 185
Age : 28
Distinction : aucune
Date d'inscription : 15/03/2008
Re: Diriger le hero a la souris
Jeu 22 Mai 2008 - 17:04
Ça pourrait servir.
- KorndorStaffeux retraité
- Nombre de messages : 4959
Age : 111
Localisation : Erem Vehyx
Distinction : Champion de boxe et au lit ! :O [Wax]
Être Mythique [Mister]
Papi Korndor qui a l'ostéoporose [Skillo]
Soldat Ikéa [Coco']
Un bonhomme, un vrai ! [Neresis]
Vieillard acariâtre [Didier Gustin]
Date d'inscription : 16/12/2007
Re: Diriger le hero a la souris
Jeu 22 Mai 2008 - 18:45
Oui, mais pas le flood!
Essaie d'éviter
Essaie d'éviter
Re: Diriger le hero a la souris
Sam 24 Mai 2008 - 11:42
Excellent !
Berka, je te le redis tu est mon dieux
Peut-on activer et désactiver le script quand l'on veut ? Avec un appelle de script par exemple.
Comme ça je pourrais crée des minis-jeux avec ce script et le désactiver lorsqu'il aura finit !
Berka, je te le redis tu est mon dieux
Peut-on activer et désactiver le script quand l'on veut ? Avec un appelle de script par exemple.
Comme ça je pourrais crée des minis-jeux avec ce script et le désactiver lorsqu'il aura finit !
- ZantetsukenMembre
- Nombre de messages : 31
Age : 31
Localisation : finistere
Distinction : aucune
Date d'inscription : 30/04/2008
Re: Diriger le hero a la souris
Sam 24 Mai 2008 - 11:46
Ouai tu gere Berka !!! Et je trouve que c'est une bonne idée celle pour le mini-jeux avec l'appelle de script
ca marche pas
Sam 24 Mai 2008 - 14:08
j'inssere mes trois scripts jusque la tous marche bien mais quand je veut ouvrir le jeu avant même d'avoir attein l'écran titre j'ai un message d'erreur donc je pense que c'est un probléme de langue des script si quelqu'un pouvez les traduires ca me servirer beaucoup.
merci
merci
- GummyStaffeux retraité
- Nombre de messages : 2666
Age : 33
Localisation : Belgique
Distinction : Modérateur imprévisible
Papy Lolo' [Nabots Nimousse]
Date d'inscription : 27/01/2008
Re: Diriger le hero a la souris
Sam 24 Mai 2008 - 14:10
Non. Donne un descriptif plus détaillé du problème et après on en reparle.
voila
Sam 24 Mai 2008 - 15:16
4rantedooz a écrit:j'inssere mes trois scripts jusque la tous marche bien mais quand je veut ouvrir le jeu avant même d'avoir attein l'écran titre j'ai un message d'erreur donc je pense que c'est un probléme de langue des script si quelqu'un pouvez les traduires ca me servirer beaucoup.
merci
c'est ca mon probléme
- GummyStaffeux retraité
- Nombre de messages : 2666
Age : 33
Localisation : Belgique
Distinction : Modérateur imprévisible
Papy Lolo' [Nabots Nimousse]
Date d'inscription : 27/01/2008
Re: Diriger le hero a la souris
Sam 24 Mai 2008 - 15:19
Et le message d'erreur, il dit quoi?
Si tu ne nous donnes pas l'info on peut pas t'aider...
Si tu ne nous donnes pas l'info on peut pas t'aider...
il dit
Sam 24 Mai 2008 - 15:39
le message d'erreur dit :
script 'deplacer sourit 3' line 13: name error occured.
uninitialized constant Mouse
script 'deplacer sourit 3' line 13: name error occured.
uninitialized constant Mouse
- GummyStaffeux retraité
- Nombre de messages : 2666
Age : 33
Localisation : Belgique
Distinction : Modérateur imprévisible
Papy Lolo' [Nabots Nimousse]
Date d'inscription : 27/01/2008
Re: Diriger le hero a la souris
Sam 24 Mai 2008 - 19:20
Maintenant on sait que c'est la ligne 13 qui plante, reste à savoir pourquoi.
Berkaaaaaaaaa?
Berkaaaaaaaaa?
Re: Diriger le hero a la souris
Mer 2 Juil 2008 - 12:49
Bonjour, ton script est génial. Y a t il moyen que le mode clic droit soit enclenché dès le début et reste? Ça serait vraiment super.
Sinon, joli travail. Je prend tout de suite.
Sinon, joli travail. Je prend tout de suite.
Re: Diriger le hero a la souris
Mer 2 Juil 2008 - 15:35
il te suffit juste de rajouter, dans le troisieme script:
@scroll = true
apres
super
et avant
if Keyboard.trigger?(Keyboard::Mouse_Right)
@scroll = true
apres
super
et avant
if Keyboard.trigger?(Keyboard::Mouse_Right)
- longhostMembre
- Nombre de messages : 12
Distinction : aucune
Date d'inscription : 20/12/2007
bug
Jeu 3 Juil 2008 - 13:44
Le script bug au niveau des moyens de transport (barque, bateau, etc...).
Le déplacement a la souris devient impossible et les flèches font juste défiler la map.
Mais très bon script sinon.
Le déplacement a la souris devient impossible et les flèches font juste défiler la map.
Mais très bon script sinon.
Re: Diriger le hero a la souris
Jeu 3 Juil 2008 - 13:50
Héhé ! Couplé avec mon système de T-RPG ca peut être énorme ! Merci beaucoup pour ton travail Berka ça ne sera pas inutile
:1010:
:1010:
Re: Diriger le hero a la souris
Jeu 3 Juil 2008 - 13:55
Je sais que j'abuse peut être un peu mais serait il possible d'enlever l'action des flèches (donc déplacer la carte) afin de laisser la possibilité de ce déplacer avec?
De plus, je crois que ça résoudrais le problème qu'a invoqué longhost.
Bien à toi
De plus, je crois que ça résoudrais le problème qu'a invoqué longhost.
Bien à toi
Re: Diriger le hero a la souris
Jeu 3 Juil 2008 - 15:20
tu as juste a supprimer, dans le dernier script:
- Code:
def move_by_input
return unless movable?
return if $game_map.interpreter.running?
case Input.dir4
when 2; $game_map.start_scroll(2, 1, Vitesse)
when 4; $game_map.start_scroll(4, 1, Vitesse)
when 6; $game_map.start_scroll(6, 1, Vitesse)
when 8; $game_map.start_scroll(8, 1, Vitesse)
end
end
- Code:
@scroll = false if Input.dir4 != 0
$game_player.update_scroll(last_real_x, last_real_y) if @scroll == true
update_vehicle
update_nonmoving(last_moving)
end
end
- longhostMembre
- Nombre de messages : 12
Distinction : aucune
Date d'inscription : 20/12/2007
suite
Jeu 3 Juil 2008 - 15:26
Berka le code est bon a présent mais la caméra ne suis plus le véhicule.
Sinon comment peut-on réassigner le clic droit en touche action,
je pense que cela serait plus utile pour un T-rpg ou a A-rpg.
Excellent boulot Berka dont je ne suis qu'un humble testeur.
Sinon comment peut-on réassigner le clic droit en touche action,
je pense que cela serait plus utile pour un T-rpg ou a A-rpg.
Excellent boulot Berka dont je ne suis qu'un humble testeur.
Re: Diriger le hero a la souris
Jeu 3 Juil 2008 - 15:33
bon... ca me donne une idee !
je re !
edit: t'entends quoi par touche action ?
le hero se deplacer et declenche l'event cible ?
ou il declanche juste l'event sans bouger ?
je re !
edit: t'entends quoi par touche action ?
le hero se deplacer et declenche l'event cible ?
ou il declanche juste l'event sans bouger ?
- longhostMembre
- Nombre de messages : 12
Distinction : aucune
Date d'inscription : 20/12/2007
Re: Diriger le hero a la souris
Jeu 3 Juil 2008 - 15:54
ouep quand tu clic sur la cible alors que tu est a coter sa le déclenche.
Dans un combat a-rpg, si tu est équipé d'une épée tu attaque direct au
contact du monstre avec le bouton droit enclencher.
Le problème est de déterminer la position de l'event qui t'interresse
(certainement en variable dans le system vu que le probleme ce pose aussi avec les touche standart clavier).
Dans un combat a-rpg, si tu est équipé d'une épée tu attaque direct au
contact du monstre avec le bouton droit enclencher.
Le problème est de déterminer la position de l'event qui t'interresse
(certainement en variable dans le system vu que le probleme ce pose aussi avec les touche standart clavier).
- longhostMembre
- Nombre de messages : 12
Distinction : aucune
Date d'inscription : 20/12/2007
Re: Diriger le hero a la souris
Jeu 3 Juil 2008 - 17:06
aucun pour l'instant ^^
J'attend de voir le possibilité de Vx pour faire un projet digne de ce nom...
J'attend de voir le possibilité de Vx pour faire un projet digne de ce nom...
Page 1 sur 2 • 1, 2
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum