LODM (L'Oasis des Makers)

Forum d'étude sur le Making RMXP
 
AccueilPortailFAQRechercherS'enregistrerMembresGroupesConnexion

Partagez
 

 Gérer la souris en Event

Aller en bas 
AuteurMessage
Roys
Guide
Guide
Roys

Nombre de messages : 111
Age : 47
Projet Principal : Le Crépuscule des Dieux
Aide Recherchée pour : des chara aRPG
Surnom : Scripteur Monomaniaque
Date d'inscription : 24/02/2007

Gérer la souris en Event Empty
MessageSujet: Gérer la souris en Event   Gérer la souris en Event Icon_minitimeVen 1 Juin - 3:25

Tada

Voici la possibilité de gérer la souris en event, son apparence, récupérer ses coordonnées dans des variables, les clics dans des interupteurs etc etc
Vous pouvez aussi récupérer les coordonnées de la souris sur la map (très utile pour un point and click)

Lisez attentivement les instructions en début de script pour gérer votre souris

Créer un nouveau script et appeler le par exemple Event Souris Smile
N'oubliez pas le script interpreter 2
http://lodm.forumactif.com/Groupe-pour-Scripts-f4/Outils-pour-Event-Maker-f7/A-mettre-pour-ajouter-de-nouvelles-fonctions-t35.htm

[code]#==============================================================================
# OUTILS
# Souris
#--------------------
# Stephane, Roys
# Mai 2007
#--------------------
# Explication
# Permet de gerer la souris en event
#--------------------
# Mode d'Emploi
# Faire inserer commentaire : Souris fonction
# Remplacer fonction, par une des options ci dessous

# Créer la souris:
# Inserer commentaire : Souris On

# Effacer la souris:
# Inserer commentaire : Souris Off

# Changer l'icone de la souris:
# Inserer commentaire : Souris Sprite nom
# - Remplacer nom, par le nom de l'icone dans le repertoire icon

# Pour récupérer les coordonnées de la souris:
# Inserer commentaire : Souris varx n
# - Remplacer n par le numero de la variable ou vous voulez stocké la coordonnées x de la souris
# Pour récupérer les coordonnées de la souris:
# Inserer commentaire : Souris vary n
# - Remplacer n par le numero de la variable ou vous voulez stocké la coordonnées y de la souris

# Pour recupérér les coordonnées de la map (par case) dans des variables
# Inserer commentaire:Souris Mapx n
# - Remplacer n par la variable qui contiendra les coordonnes x de la souris sur la map
# Inserer commentaire:Souris Mapy n
# - Remplacer n par la variable qui contiendra les coordonnes y de la souris sur la map

# Récupérer si clic gauche:
# Inserer commentaire : Souris clicg n
# - Remplacer n par le numero de l'interupteur qui stock le bouton gauche
# Récupérer si clic droit:
# Inserer commentaire : Souris clicd n
# - Remplacer n par le numero de l'interupteur qui stock le bouton droit

# Deplacer la souris (uniquement si la souris est gelé):
# Inserer commentaire : Souris x xx y yy
# - Remplacer xx par les coordonnées x ou v[n] pour le contenu de la variable n
# - Remplacer ... par les coordonnées you v[n] pour le contenu de la variable n

# Geler la souris :
# Inserer commentaire : Souris gele
# La souris ne bouge plus

# Dégeler la souris :
# Inserer commentaire : Souris degele
# La souris bouge à nouveau

# Changer l'opacité:
# Inserer commentaire : Souris Opacite valeur

# icone de la souris de départ dans le repertoire icon
MOUSE_SPRITE = "001-Weapon01"
#==============================================================================
# Interpreter
#==============================================================================
class Interpreter
alias outil_souris_command108 command_108

def command_108
# Commande non valide
if @parameters[0].split.size>1
# Commande valide
if (@parameters[0].upcase)[/SOURIS/]=="SOURIS"
#----------------------
# Recupère les commandes
ligne=@parameters[0]
com=ligne.split
for i in 1..com.size-1
case com[i].upcase
#----------------------
# Créer la souris
when "ON"
$souris.sprite.visible=true
when "OFF"
$souris.sprite.visible=false
when "SPRITE"
#----------------------
# change Apparence
$souris.souris_icone=com[i+1]
$souris.refresh
when "OPACITE"
$souris.sprite.opacity=com[i+1].to_i
#----------------------
# Coordonnées
when "VARX"
$game_variables[com[i+1].to_i]=$souris.x
when "VARY"
$game_variables[com[i+1].to_i]=$souris.y
when "MAPX"
$game_variables[com[i+1].to_i]=($souris.x+$game_map.display_x/4)/32
when "MAPY"
$game_variables[com[i+1].to_i]=($souris.y+$game_map.display_y/4)/32
when "X"
com[i+1].gsub!(/\[Vv][([0-9]+)]/) { $game_variables[$1.to_i] }
$souris.x=com[i+1].to_i
when "Y"
com[i+1].gsub!(/\[Vv][([0-9]+)]/) { $game_variables[$1.to_i] }
$souris.y=com[i+1].to_i
when "GELE"
$souris.gele=true
when "DEGELE"
$souris.gele=false
# clic
when "CLICG"
$game_switches[com[i+1].to_i]=$souris.gauche
when "CLICD"
$game_switches[com[i+1].to_i]=$souris.droit
end
end
end
end
outil_souris_command108
end
end
#======================================
# SCENE TITLE
#======================================
class Scene_Title
alias outils_souris_scene_title_main main
#--------------------------------------------------------------------------
# MAIN
#--------------------------------------------------------------------------
def main
$souris=Mouse.new
$clavier=Keyboard.new
outils_souris_scene_title_main
end
end

#======================================
# SCENE MAP
#======================================
class Scene_Map
alias outils_souris_scene_map_update update

def update
outils_souris_scene_map_update
$clavier.update
$souris.update
end
end

#======================================
# Keyboard
#======================================
class Keyboard
GetKeyState = Win32API.new("user32","GetAsyncKeyState",['i'],'i')
GetKeyboardState = Win32API.new("user32","GetKeyState",['i'],'i')
GetSetKeyState = Win32API.new("user32","SetKeyboardState",['i'],'i')
#--------------------------------------------------------------------------
# 'Fonctions API
#--------------------------------------------------------------------------
# TEST pour duree de pression
def keyb(rkey)
if GetKeyState.call(rkey) != 0
return 1
end
return 0
end
#--------------------------------------------------------------------------
# TEST pour une pression
def keyboard(rkey)
GetKeyState.call(rkey) & 0x01 == 1 #
end
#--------------------------------------------------------------------------
def key(rkey, key = 0)
GetKeyboardState.call(rkey) & 0x01 == key #
end

#--------------------------------------------------------------------------
# INITIALIZE
#--------------------------------------------------------------------------
def initialize
@Rcompteur=0
@Rclick=false
@delai=0
@double=0
@debut_double=0
@compte_maintenu=0
@compteur=0
end

#--------------------------------------------------------------------------
# UPDATE
# Recupere les touches du jeu et les coord de la souris
#--------------------------------------------------------------------------
def update
# Touches
souris=GetKeyState.call(0x01)
$souris.gauche_maintenu=(souris!=0)
$souris.gauche= (souris & 0x01 == 1)
$souris.droit=keyboard(0x02)
$souris.milieu=keyboard(0x04)
# Touche du jeu
@delai=[@delai-1,0].max
# Test pour double fleche
if (Input.dir4==0 and @double!=0) or (Graphics.frame_count==@compteur and @debut_double!=0)
@double=0
@debut_double=0
end
if Input.trigger?(Input.dir4) and @double==0
if @debut_double == Input.dir4
@double=Input.dir4
@debut_double=0
else
@debut_double=Input.dir4
@compteur=Graphics.frame_count+16
end
end
end
end
#----------------------------------------------------
# SOURIS
# Gere la souris a l'ecran
#----------------------------------------------------
class Mouse
attr_accessor :sprite
attr_accessor Mad
attr_accessor :y
attr_accessor :gauche
attr_accessor :droit
attr_accessor :milieu
attr_accessor :gauche_maintenu
attr_accessor :souris_icone
attr_accessor :gele

def initialize
# Sprite Souris
@sprite=Sprite.new
@souris_icone=MOUSE_SPRITE
refresh
@gele=false
@sprite.visible=false
@sprite.z=5000
@gauche=false
@droit=false
@milieu=false
@gauche_maintenu=false
@x=0
@y=0
# Recupere le Curseur
@cursor_pos = Win32API.new('user32', 'GetCursorPos', 'p', 'i')
# Recupere la taille de la fenetre
@width, @height = 640,480
# Fonction de l'API
@scr2cli = Win32API.new('user32', 'ScreenToClient', %w(l p), 'i')
@client_rect = Win32API.new('user32', 'GetClientRect', %w(l p), 'i')
@readini = Win32API.new('kernel32', 'GetPrivateProfileStringA', %w(p p p p l p), 'l')
@findwindow = Win32API.new('user32', 'FindWindowA', %w(p p), 'l')
# Recupere la fenetre de jeu
@hwnd=hwnd
# Rend la souris invisible
@cursor = Win32API.new("user32", "ShowCursor", "i", "i" )
@cursor.call(0)
end

#--------------------------------------------------------------------------
# POSITION SOURIS HORS JEU
#--------------------------------------------------------------------------
def souris_hors_jeu
pos = [0, 0].pack('ll')
if @cursor_pos.call(pos) != 0
return pos.unpack('ll')
else
return nil
end
end

#--------------------------------------------------------------------------
# SOURIS EN JEU
# Recupere et test la posision de la souris
#--------------------------------------------------------------------------
def souris_en_jeu(catch_anywhere = false)
@x, @y = transition(*souris_hors_jeu)
width, height = @width,@height
if @x ==nil or @y== nil
return 0,0
end
if catch_anywhere or (@x >= 0 and @y >= 0)
@x = @x==nil ? 0 : @x
@y = @y==nil ? 0 : @y
return @x, @y
else
return 0,0
end
end

#--------------------------------------------------------------------------
# TRANSIITON
# Recupere la posision de la souris
#--------------------------------------------------------------------------
def transition(x, y)
return nil unless x and y
pos = [x, y].pack('ll')
if @scr2cli.call(@hwnd, pos) != 0
return pos.unpack('ll')
else
return nil
end
end

#--------------------------------------------------------------------------
# HWND
# Trouve la fenetre de jeu
#--------------------------------------------------------------------------
def hwnd
game_name = "" * 256
@readini.call('Game','Title','',game_name,255,".\Game.ini")
game_name.delete!("")
return @findwindow.call('RGSS Player',game_name)
end

#--------------------------------------------------------------------------
# CLIENT SIZE
# Determine la taille de la fenetre
#--------------------------------------------------------------------------
def client_size
rect = [0, 0, 0, 0].pack('l4')
@client_rect.call(@hwnd, rect)
right, bottom = rect.unpack('l4')[2..3]
return right, bottom
end

#--------------------------------------------------------------------------
# SUR MAP
# bouleen pur savoir si la souris est sur la MAP
#--------------------------------------------------------------------------
def sur_map
return (@x<640 and @y<480)
end

#--------------------------------------------------------------------------
# REFRESH
# Rafraichit l apparence de la souris
#--------------------------------------------------------------------------
def refresh
@sprite.bitmap.dispose if @sprite.bitmap != nil
@sprite.bitmap=RPG::Cache.icon(@souris_icone)
end

#--------------------------------------------------------------------------
# UPDATE
# Affichage de la souris
#--------------------------------------------------------------------------
def update
souris_en_jeu if not @gele
@sprite.x=@x
@sprite.y=@y
end

#--------------------------------------------------------------------------
# TEST
# Renvoi True si la souris est sur les positions x y
#--------------------------------------------------------------------------
def position(x,y)
# Remplace les variables par leur contenu
# Execute le test de position
a=@x+$game_map.display_x/4
b=@y+$game_map.display_y/4
x*=32
y*=32
return (a-16


Dernière édition par le Jeu 12 Juil - 3:59, édité 6 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://lodm.forumactif.com
Siegfried
Guide
Guide


Nombre de messages : 37
Age : 32
Projet Principal : Legacy of Judge : Veil of Oblivion
Date d'inscription : 26/02/2007

Gérer la souris en Event Empty
MessageSujet: Re: Gérer la souris en Event   Gérer la souris en Event Icon_minitimeVen 1 Juin - 12:49

Si tu continues à simplifier comme ça, je vais me mettre à la souris...
C'est très bien imaginé pour l'utilisation :
-Test des 2 boutons
-Coordonnées
-Activation/Désactivation.

Vraiment super.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Roys
Guide
Guide
Roys

Nombre de messages : 111
Age : 47
Projet Principal : Le Crépuscule des Dieux
Aide Recherchée pour : des chara aRPG
Surnom : Scripteur Monomaniaque
Date d'inscription : 24/02/2007

Gérer la souris en Event Empty
MessageSujet: Re: Gérer la souris en Event   Gérer la souris en Event Icon_minitimeLun 4 Juin - 3:35

Yep, d'ailleurs tu as pu remarquer qu'il y a un script de gestion du
clavier donc il faudrait faire suivre avec des commandes RMXP pour
gérer le clavier Wink

EDit:
Boum un petit update avec plus d'explication, et la possibilité de
positionner la souris, attention elle doit etre geler auparavant sinon
ca ne marche pas (ceci fait pour eviter les conflit avec la position
réélle de la souris)

+ Un update pour récupérer les coordonnées de la souris sur la map

+ un update avec un exemple en event de ce qu'on peut faire


Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://lodm.forumactif.com
Newbie



Nombre de messages : 1
Date d'inscription : 15/10/2009

Gérer la souris en Event Empty
MessageSujet: Re: Gérer la souris en Event   Gérer la souris en Event Icon_minitimeJeu 15 Oct - 7:14

Moi ca bug!!!!!! ligne 347!
(au passage, c'est possible un script qui permet juste de remplacer entrée par le clic droit de la souris?)
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Contenu sponsorisé




Gérer la souris en Event Empty
MessageSujet: Re: Gérer la souris en Event   Gérer la souris en Event Icon_minitime

Revenir en haut Aller en bas
 
Gérer la souris en Event
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Texte change de Police d'ecriture au passage de la souris
» Image qui suit la souris
» Passer la souris pour ouvrir une zone possédant un texte.
» Grossir le titre des forums lorsqu'on passe la souris dessus.
» Sripts différents pour curseur souris

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
LODM (L'Oasis des Makers) :: Groupe pour Scripts :: Outils pour Event-Maker-
Sauter vers: