Partagez
Aller en bas
Hilda
Hilda
Membre

Nombre de messages : 89
Age : 41
Distinction : aucune
Date d'inscription : 06/02/2011
https://www.facebook.com/dascottevirginie

[résolu] Afficher le curseur de la souris en plein écran Empty [résolu] Afficher le curseur de la souris en plein écran

le Mar 15 Fév 2011 - 17:28
Bonjour tout le monde,

Mon problème paraît très simple, et pourtant je n'ai rien trouvé sur le forum, même en faisant une recherche.
Voilà : j'utilise un script pour diriger le héros avec la souris, mais quand je lance le jeu en plein écran, il n'y a pas de curseur visible.
La souris fonctionne pourtant en plein écran, puisque le héros se déplace quand je clique. Auriez-vous un script permettant d'afficher un curseur ?
Je me doute bien que je devrais avoir un fichier graphique parce que je ne pense pas qu'on utilise dans ce cas le curseur de Windows, mais de ce côté, pas de souci.
Pour info, le script souris que j'utilise, c'est celui de SephirothSpawn.
Je ne connais pas encore bien le code Ruby, mais je me débrouille pour placer et modifier les codes.

Merci merci merci [résolu] Afficher le curseur de la souris en plein écran 418140



Dernière édition par Hilda le Mar 15 Fév 2011 - 22:27, édité 2 fois
Berka
Berka
Administrateur

Nombre de messages : 1832
Age : 29
Localisation : Paris
Distinction : rubyste déglingué
9ème dan en scripting-no-jutsu

Nouveau Justine Beber ;P
Date d'inscription : 16/12/2007
http://rpgruby.olympe-network.com

[résolu] Afficher le curseur de la souris en plein écran Empty Re: [résolu] Afficher le curseur de la souris en plein écran

le Mar 15 Fév 2011 - 19:29
Peux-tu poster ici le script de souris que tu utilises ?
Hilda
Hilda
Membre

Nombre de messages : 89
Age : 41
Distinction : aucune
Date d'inscription : 06/02/2011
https://www.facebook.com/dascottevirginie

[résolu] Afficher le curseur de la souris en plein écran Empty Re: [résolu] Afficher le curseur de la souris en plein écran

le Mar 15 Fév 2011 - 19:56
Voir ci-dessous - c'est un script trouvé sur ce forum je suppose - je ne pense pas en avoir trouvé ailleurs.
Il y a une partie de toi je crois, mais j'ai enlevé une partie pour obtenir le gameplay que je recherchais.
Je pense que c'est possible de faire afficher le curseur non ? Merci d'avance.

Spoiler:
#===========================================
# Module Keyboard/Mouse
# par SephirothSpawn
#===========================================

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
#===========================================
# 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 and break_pose if @map[@x+1,@y] == step - 1 and step != 0
move_down and break_pose if @map[@x,@y+1] == step - 1 and step != 0
move_left and break_pose if @map[@x-1,@y] == step -1 and step != 0
move_up and break_pose if @map[@x,@y-1] == step - 1 and step != 0
when 1
move_up and break_pose if @map[@x,@y-1] == step - 1 and step != 0
move_left and break_pose if @map[@x-1,@y] == step -1 and step != 0
move_down and break_pose if @map[@x,@y+1] == step - 1 and step != 0
move_right and break_pose 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
#===========================================
# Mouvement par souris
# par berka
#===========================================
# modifié:
# clic gauche: definir le point d'arrivée + scrolling automatique
#===========================================

$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
Berka
Berka
Administrateur

Nombre de messages : 1832
Age : 29
Localisation : Paris
Distinction : rubyste déglingué
9ème dan en scripting-no-jutsu

Nouveau Justine Beber ;P
Date d'inscription : 16/12/2007
http://rpgruby.olympe-network.com

[résolu] Afficher le curseur de la souris en plein écran Empty Re: [résolu] Afficher le curseur de la souris en plein écran

le Mar 15 Fév 2011 - 20:44
Essaye avec cela. A copier au dessus de main
Code:
#----------------------------------------
#           Curseur par Berka
# rgss2
# nécessite le script Mouse
# changement du curseur
# Curseur.set(fichier)
#----------------------------------------
module Berka
  module Curseur_Mod
    Bmp_Curs='Graphics/System/Curseur.png'
    Scroll_Actif=true
  end
end
class Sprite_Curseur < RPG::Sprite
  def initialize
    super
    Win32API.new('user32','ShowCursor','i','i').call(0)
    self.z=5000
    set(Berka::Curseur_Mod::Bmp_Curs)
    update
  end
  def set(curseur="")
    (self.bitmap=Bitmap.new(curseur);return)rescue nil
    self.bitmap=Bitmap.new(24,24)
    bitmap=RPG::Cache.icon("001-Weapon01")
    rect=Rect.new(0,0,24,24)
    self.bitmap.blt(0,0,bitmap,rect)
  end
  def update;super;self.x,self.y=Mouse.pos;end
  def dispose;super;end
end
Curseur=Sprite_Curseur.new
module Graphics
  class<<self
    alias :graphics_update :update unless Graphics.methods.include?('graphics_update')
    def update
      graphics_update
      Curseur.update
    end
  end
end
Hilda
Hilda
Membre

Nombre de messages : 89
Age : 41
Distinction : aucune
Date d'inscription : 06/02/2011
https://www.facebook.com/dascottevirginie

[résolu] Afficher le curseur de la souris en plein écran Empty Re: [résolu] Afficher le curseur de la souris en plein écran

le Mar 15 Fév 2011 - 21:53
Merci pour cette réponse rapide Berka !
J'ai donc, fabriqué un curseur au format png et l'ai nommé comme dans ton code, mais il y a un message d'erreur malgré tout : TypeError occured, undefined superclass 'sprite'.
à la ligne :
Code:
class Sprite_Curseur < RPG::Sprite
C'est une ligne manquante peut-être.
Ou bien est-ce une question de version de RM ? J'ai la version VX.

Berka
Berka
Administrateur

Nombre de messages : 1832
Age : 29
Localisation : Paris
Distinction : rubyste déglingué
9ème dan en scripting-no-jutsu

Nouveau Justine Beber ;P
Date d'inscription : 16/12/2007
http://rpgruby.olympe-network.com

[résolu] Afficher le curseur de la souris en plein écran Empty Re: [résolu] Afficher le curseur de la souris en plein écran

le Mar 15 Fév 2011 - 22:01
Essaye avec :
Code:
class Sprite_Curseur < Sprite
Hilda
Hilda
Membre

Nombre de messages : 89
Age : 41
Distinction : aucune
Date d'inscription : 06/02/2011
https://www.facebook.com/dascottevirginie

[résolu] Afficher le curseur de la souris en plein écran Empty Re: [résolu] Afficher le curseur de la souris en plein écran

le Mar 15 Fév 2011 - 22:07
Maintenant, il me dit " undefined method 'pos' for Mouse:Class ".
Berka
Berka
Administrateur

Nombre de messages : 1832
Age : 29
Localisation : Paris
Distinction : rubyste déglingué
9ème dan en scripting-no-jutsu

Nouveau Justine Beber ;P
Date d'inscription : 16/12/2007
http://rpgruby.olympe-network.com

[résolu] Afficher le curseur de la souris en plein écran Empty Re: [résolu] Afficher le curseur de la souris en plein écran

le Mar 15 Fév 2011 - 22:10
En effet, le script a été légèrement modifié dans ta version:
Voici le script correct
Code:
#----------------------------------------
#          Curseur par Berka
# rgss2
# nécessite le script Mouse
# changement du curseur
# Curseur.set(fichier)
#----------------------------------------
module Berka
  module Curseur_Mod
    Bmp_Curs='Graphics/System/Curseur.png'
    Scroll_Actif=true
  end
end
class Sprite_Curseur < Sprite
  def initialize
    super
    Win32API.new('user32','ShowCursor','i','i').call(0)
    self.z=5000
    set(Berka::Curseur_Mod::Bmp_Curs)
    update
  end
  def set(curseur="")
    (self.bitmap=Bitmap.new(curseur);return)rescue nil
    self.bitmap=Bitmap.new(24,24)
    bitmap=RPG::Cache.icon("001-Weapon01")
    rect=Rect.new(0,0,24,24)
    self.bitmap.blt(0,0,bitmap,rect)
  end
  def update;super;self.x,self.y=$mouse.pos;end
  def dispose;super;end
end
Curseur=Sprite_Curseur.new
module Graphics
  class<<self
    alias :graphics_update :update unless Graphics.methods.include?('graphics_update')
    def update
      graphics_update
      Curseur.update
    end
  end
end
Hilda
Hilda
Membre

Nombre de messages : 89
Age : 41
Distinction : aucune
Date d'inscription : 06/02/2011
https://www.facebook.com/dascottevirginie

[résolu] Afficher le curseur de la souris en plein écran Empty Re: [résolu] Afficher le curseur de la souris en plein écran

le Mar 15 Fév 2011 - 22:26
Oui, en effet, j'espère que tu n'y as pas trouvé trop d'aberrations, en tous cas, je n'avais pas de bug.

Ton code fonctionne impeccable, merci beaucoup.
Je mets donc "résolu" dans mon titre, et je pense qu'il faudrait l'ajouter au listing des scripts, non ?

Merci encore , et bonne nuit.
Revenir en haut
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum