Pokémon Script Project Index du Forum

S’enregistrer | Rechercher | Connexion
 Information des admins 
Si vous désirez parler de PSP ou obtenir du soutient là dessus, merci d'aller faire un tour sur https://pokemonworkshop.com/forum/index.php Imbécile heureux

Nyuky's Input
Aller à la page: 1, 2  >
 
Poster un nouveau sujet   Répondre au sujet    Pokémon Script Project Index du Forum -> Game Making -> Ressources techniques -> Scripts
Sujet précédent :: Sujet suivant   
Auteur Message
Nuri Yuri
Administrateur
Administrateur


Inscrit le: 15 Oct 2008
Messages: 6 383
~Entity~
Localisation: Nancy
Non renseigné (Visible...)
ID Steam: Nuri_Yuri

MessagePosté le: Sam 2 Mar - 22:49 (2013)    Sujet du message: Nyuky's Input

Salut à tous, aujourd'hui je poste mon script de détection des inputs, il prend en charge la souris, les touches du clavier et gère partiellement les joysticks. Sachez que Zeus a déjà fait un script plus performant et entièrement en ruby pour gérer les inputs : http://www.rpg-maker.fr/scripts-324-input-ultimate-2.html j'ai juste codé cette version il y a longtemps car je préfère utiliser mon travail plutôt que celui des autres, ça me permet de coder et de rencontrer divers problèmes (instructifs généralement).

Le script est dépendant de plusieurs autres scripts, par ailleurs il est optimisé pour RMVX.Ace mais j'ai mis en commentaire pour éviter les problèmes. Par ailleurs, il est fortement conseillé d'installer les scripts dans l'ordre donné sur ce sujet.

I - Kernel


Ce script comprend le chargement de plusieurs APIs et la récupération sécurisé du HWND de la fenêtre de jeu RGSS.
Code:
#===
#¤Patch du module Kernel
#---
#+29/12/12 : Nyagato Nyuky
#===
module Kernel
  #alias p msgbox_p
  #alias print msgbox
  GetPrivateProfileString=Win32API.new("Kernel32", "GetPrivateProfileString", "pppplp", "l");
  FindWindowA=Win32API.new("User32", "FindWindowA", "pp", "l");
  GetCursorPos=Win32API.new("User32", "GetCursorPos", "p", "i");
  ScreenToClient=Win32API.new("User32", "ScreenToClient", "lp", "i");
  GetKeyboardState=Win32API.new("User32","GetKeyboardState",'p','i');
  GetForegroundWindow=Win32API.new("User32","GetForegroundWindow",'','i');
  GetWindowThreadProcessId=Win32API.new("User32","GetWindowThreadProcessId",'ip','i');
  RegisterRawInputDevices=Win32API.new("User32","RegisterRawInputDevices","pii","i");
  RtlMoveMemory_ipi=Win32API.new("kernel32","RtlMoveMemory","ipi","");
  ResetRGSSWinProc=Win32API.new("NyukyAPI","ResetRGSSWinProc","ip","");
  CountJoy=Win32API.new("NyukyAPI","countJoy","","i");
  CopyJoyHdev=Win32API.new("NyukyAPI","copyJoyhdev","p","i");
  SizeJoyData=Win32API.new("NyukyAPI","sizeJoydata","i","i");
  CopyJoyData=Win32API.new("NyukyAPI","copyJoydata","ip","i");
  #===
  #>Récupération du HWND de la fenêtre
  #===
  module_function
  def get_handle()
    unless($HWND)
      hwnd=FindWindowA.call("RGSS Player",nil);
      spid="\x00\x00\x00\x00";
      GetWindowThreadProcessId.call(hwnd,spid);
      gpid=spid.unpack('i')[0];
      pid=Process::pid();
      if(gpid==pid)
        $HWND=hwnd;
      else
        hwnd=GetForegroundWindow.call();
        GetWindowThreadProcessId.call(hwnd,spid);
        gpid=spid.unpack('i')[0];
        if(gpid==pid)
          $HWND=hwnd;
        else
          GetPrivateProfileString.call("Game","Title","",title="\x00"*256,256,".//Game.ini");
          hwnd=FindWindowA.call("RGSS Player",title.delete("\x00"));
          GetWindowThreadProcessId.call(hwnd,spid);
          gpid=spid.unpack('i')[0];
          if(gpid==pid)
            $HWND=hwnd;
          else
            $HWND=0;
            msgbox("Impossible d'obtenir l'handle de la fenêtre de jeu...");
          end
        end
      end
      ResetRGSSWinProc.call($HWND,".//Game.ini");
    end
    return $HWND
  end
  get_handle();
end


Note : Supprimez la ligne 55 si vous ne souhaitez pas utiliser les joystick et garder le WndProc originel du RGSS (provocant la pause du jeu lors que la fenêtre n'est pas active).

II - StructGenerator


Ce script permet de générer des structures compatible avec les programme en C/C++/Asm.
Code:
#===
#¤Nyuky's StructGenerator Module
#---
#+01/01/13 : Nyagato Nyuky
#===
module StructGenerator
  Char=:char
  Uchar=:uchar
  Byte=:byte
  Word=:word
  Uword=:uword
  Dword=:dword
  Udword=:udword
  Int=:int
  Uint=:uint
  Float=:float
  Qword=:qword
  Uqword=:uqword
  Double=:double
  Ptr=:ptr
  TypesOffsets={Char=>1,Uchar=>1,Byte=>1,Word=>2,Uword=>2,
  Dword=>4,Udword=>4,Int=>4,Uint=>4,Float=>4,
  Qword=>8,Uqword=>8,Double=>8,Ptr=>4}
  TypesNames={Char=>"Sc",Uchar=>"SC",Byte=>"SC",Word=>"Ss",Uword=>"SS",
  Dword=>"Sl",Udword=>"SL",Int=>"Sl",Uint=>"SL",Float=>"Sf",
  Qword=>"Sq",Uqword=>"SQ",Double=>"Sd",Ptr=>"SL"}
  module_function
  def run(name,mod,members)
    if(mod.const_defined?(name))
      warn("La classe #{name} existe déjà !\n")
      return false
    end
    v=Class.new(String)
    sinitialize="def initialize(*args);"
    stos="def to_s();\"#<#{name}:\#{(self.object_id*2).to_s(16)} "
    index=0
    offset=0
    members.each_key do |m|
      ot=members[m]
      os=TypesOffsets[ot]
      oc=TypesNames[ot]
      sinitialize<<"self.#{m}=args[#{index}] ? args[#{index}] : 0;"
      stos<<"#{ot} #{m}=\#{#{m}()};"
      v.class_eval("def #{m}() return self[#{offset},#{os}].unpack(#{oc})[0] end;def #{m}=(v) self[#{offset},#{os}]=[v].pack(#{oc}) end")
      index+=1
      offset+=os
    end
    sinitialize<<"end;"
    stos<<"\"end"
    v.class_eval(sinitialize)
    v.class_eval(stos)
    v.class_eval("def self_ptr() return [self].pack(Sp).unpack(SL)[0] end")
    mod.const_set(name,v)
    sinitialize=nil
    stos=nil
    name=nil
    members=nil
    GC.start
    return true
  end
end
#===
#>Définition de constantes dans la classe String pour les structure
#===
class String
  Sc='c';SC='C';Ss='s';SS='S';Sl='l';SL='L';Sq='q';SQ='Q';Sf='f';Sd='d';Sp='p'
end


III - WinAPIStructs


Module contenant les diverses structures utilisés par Input.
Code:
#===
#¤WinAPIStructs
#---
#+01/01/13 : Nyagato Nyuky
#===
module WinAPI
  g=StructGenerator
  g.run("Point",self,:x=>:int,:y=>:int)
  g.run("MSG",self,"hwnd"=>:int,"message"=>:uint,"wParam"=>:uint,"lParam"=>:int,"time"=>:int,"x"=>:int,"y"=>:int)
  g.run("RAWINPUTDEVICE",self,"usUsagePage"=>:uword,"usUsage"=>:uword,"dwFlags"=>:dword,"hwndTarget"=>:int);
end


IV - Input


Le fameux module contenant toute les fonctions.
Code:
#===
#¤Nyuky's Input Module
#---
#+29/12/12 : Nyagato Nyuky
#===
#>Patch...
#===
class << Input
  alias :ori_press? :press?
  alias :ori_trigger? :trigger?
  alias :ori_update :update
  attr_reader :mx, :my, :press, :opress,:joypad_enabled,:joys_data,:joys_dato
end
module Input
  MPos=WinAPI::Point.new();#"\x00\x00\x00\x00\x00\x00\x00\x00";
  Upck="ll";
  @mx=0;
  @my=0;
  @press="\x00"*256;
  @opress=@press.clone();
  @KeyParam=Hash.new();
  @joypad_enabled=false
  @joys_data=Array.new
  @joys_dato=Array.new
  @joys_hdev=Array.new
  #===
  #>Enregistrement des devices
  #===
  d=WinAPI::RAWINPUTDEVICE.new(0x01,0x04);
  d2=WinAPI::RAWINPUTDEVICE.new(0x01,0x05);
  RegisterRawInputDevices.call(d+d2,2,d.bytesize);
  module_function
  def update()
    @press,@opress=@opress,@press;
    GetKeyboardState.call(@press);
    ori_update();
    GetCursorPos.call(MPos);
    ScreenToClient.call($HWND,MPos);
    @mx,@my=*MPos.unpack(Upck)
    if @joypad_enabled
      need=false
      @joys_hdev.size.times do |i|
        @joys_dato[i],@joys_data[i]=@joys_data[i],@joys_dato[i]
        size=SizeJoyData.call(@joys_hdev[i])
        if size<0
          @joys_hdev[i]=nil
          need=true
          next
        end
        size2=@joys_data[i].size
        @joys_data[i]="\x00"*size if(size!=size2)
        CopyJoyData.call(@joys_hdev[i],@joys_data[i])
      end
      update_joys() if need
    end
  end
  #===
  #>Méthodes en rapport avec le clavier
  #===
  def kpress?(v) return (@press.getbyte(v)&0x80 != 0) end
  def ktrigger?(v)
    return ((@opress.getbyte(v)&0x80 != 0) and (@press.getbyte(v)&0x80 == 0));
  end
  def ktrigger2?(v)
    return ((@opress.getbyte(v)&0x80 == 0) and (@press.getbyte(v)&0x80 != 0));
  end
  def get_KeyParam() return @KeyParam end
  def ppress?(k) return press?(@KeyParam[k].to_i) end
  def ptrigger?(k) return trigger?(@KeyParam[k].to_i) end
  def ptrigger2?(k) return trigger2?(@KeyParam[k].to_i) end
  #===
  #>Méthodes en rapport avec le joypad
  #===
  def enable_joy()
    @joypad_enabled=true;
    update_joys();
  end
  def disable_joy()
    @joypad_enabled=false;
  end
  def update_joys()
    nb_joy=CountJoy.call();
    if(nb_joy>0 and nb_joy<256)
      hdevs="\x00\x00\x00\x00"*nb_joy
      unless(CopyJoyHdev.call(hdevs)==1);
        print("Erreur, impossible de récupérer les identifiants de joypad.");
        return;
      end
      hdevs=hdevs.unpack("i*")
      (hdevs-@joys_hdev).each do |i|
        next if @joys_hdev.index(i);
        pos=@joys_hdev.index(nil);
        pos=@joys_hdev.size unless pos;
        @joys_hdev[pos]=i;
        @joys_data[pos]=String.new();
        @joys_dato[pos]=String.new();
      end
    end
  end
  def rx(id)
    str=@joys_data[id];
    return 0 unless str and str.size>0;
    return str.getbyte(str.size-4).to_i-128;
  end
  def ry(id)
    str=@joys_data[id];
    return 0 unless str and str.size>0;
    return str.getbyte(str.size-3).to_i-128;
  end
  def lx(id)
    str=@joys_data[id];
    return 0 unless str and str.size>0;
    return str.getbyte(str.size-6).to_i-128;
  end
  def ly(id)
    str=@joys_data[id];
    return 0 unless str and str.size>0;
    return str.getbyte(str.size-5).to_i-128;
  end
  def jpress?(id,key)
    str=@joys_data[id]
    return false if str.size<2
    return (str.getbyte(str.size-2)&(1<<key))!=0 if(key<8);
    key-=8;
    return (str.getbyte(str.size-1)&(1<<key))!=0
  end
  def jtrigger?(id,key)
    str=@joys_dato[id]
    str2=@joys_data[id]
    return false if str.size<2 or str2.size<2
    return ((str.getbyte(str.size-2)&(1<<key))==0 and
    (str2.getbyte(str.size-2)&(1<<key))!=0) if(key<8);
    key-=8;
    return ((str.getbyte(str.size-1)&(1<<key))==0 and
    (str2.getbyte(str.size-1)&(1<<key))!=0)
  end
  #===
  #>Méthodes en rapport avec la souris
  #===
  #>Detection de la souris dans rectangle
  #===
   def m_here?(x,y,width,height)
      xm=x+width
      ym=y+height
      (@mx >= x and @mx <= xm and @my >= y and @my <= ym)
   end
  #===
  #>Detection dans un objet de cette classe
  #===
   def m_in_rect?(rect)
      m_here?(rect.x,rect.y,rect.width,rect.height)
   end
  #===
  #>Detections dans un viewport
  #===
   def m_in_viewport?(viewport)
      m_here?(viewport.rect.x,viewport.rect.y,viewport.rect.width,viewport.rect.height)
   end
  #===
  #>Detection de la souris dans un sprite
  #% Il doit être visible et doit avoir une boite de dessin (bitmap)
  #===
  def m_in_sprite?(sprite)
      return false unless sprite.visible
      return false unless sprite.src_rect
      if sprite.viewport
         vx,vy=sprite.viewport.rect.x,sprite.viewport.rect.y
         vw,vh=sprite.viewport.rect.width,sprite.viewport.rect.height
      else
         vx=vy=0
         vw=vh=1024
      end
      sx=sprite.x-sprite.ox
      sy=sprite.y-sprite.oy
      sw=sprite.src_rect.width
      sh=sprite.src_rect.height
      if sx >= 0
         @lsp_x=x=sx+vx
      else
         x=vx  #Si sx < 0 il est donc visible au début du viewport
         sw+=sx #On ajoute donc la position x du sprite pour avoir la taille visible
         @lsp_x=sx+vx  #Utile pour in_sprite_plus?
      end
      if sy >= 0
         @lsp_y=y=sy+vy
      else
         y=vy
         @lsp_y=sy+vy
         sh+=sy
      end
      xs=vx+sx+sw
      xv=vx+vw
      ys=vy+sy+sh
      yv=vy+vh
      width=(xs > xv ? sw-(xs-xv) : sw )
      height=(ys > yv ? sh-(ys-yv) : sh)
      m_here?(x,y,width,height)
   end
  #===
  #>Detection avancée : Detecte si la souris pointe sur un pixel non transparent
  #===
   def m_in_sprite_plus?(sprite)
      b=m_in_sprite?(sprite)
      if b
         x=@mx-@lsp_x
         y=@my-@lsp_y
         px=sprite.bitmap.get_pixel(x,y).alpha
         return (px != 0)
      end
      false
   end
  #===
  #>Detection prennant en compte les zoom_x et le déplacement du viewport
  #===
  def m_in_sprite_plus2?(sprite,al=false)
      return false unless sprite.visible
      return false unless sprite.src_rect
      if sprite.viewport
         vx,vy=sprite.viewport.rect.x,sprite.viewport.rect.y
         vw,vh=sprite.viewport.rect.width,sprite.viewport.rect.height
      vox,voy=sprite.viewport.ox,sprite.viewport.oy
      else
         vx=vy=0
         vw=vh=1024
      vox=voy=0
      end
      sx=sprite.x-sprite.ox*sprite.zoom_x-vox
      sy=sprite.y-sprite.oy*sprite.zoom_y-voy
      sw=sprite.src_rect.width*sprite.zoom_x
      sh=sprite.src_rect.height*sprite.zoom_y
      if sx >= 0
         @lsp_x=x=sx+vx
      else
         x=vx  #Si sx < 0 il est donc visible au début du viewport
         sw+=sx #On ajoute donc la position x du sprite pour avoir la taille visible
         @lsp_x=sx+vx  #Utile pour in_sprite_plus?
      end
      if sy >= 0
         @lsp_y=y=sy+vy
      else
         y=vy
         @lsp_y=sy+vy
         sh+=sy
      end
      xs=vx+sx+sw
      xv=vx+vw
      ys=vy+sy+sh
      yv=vy+vh
      width=(xs > xv ? sw-(xs-xv) : sw )
      height=(ys > yv ? sh-(ys-yv) : sh)
      b=m_here?(x,y,width,height)
    if(al and b)
      x=@mx-@lsp_x
         y=@my-@lsp_y
         px=sprite.bitmap.get_pixel(x,y).alpha
         return (px != 0)
    else
      return b
    end
   end
  #===
  #>Detection completement useless mais bon...
  #===
   def m_in_window?(window)
      return false unless window.visible
      m_here?(window.x-window.ox,window.y-window.oy,window.height,window.width)
   end
end


V - Explication de certaines fonctions


kpress?(val) : Vérifie si la touche du clavier identifié par val (13 pour entrée par exemple) est pressée.
ktrigger?(val) : Vérifie si la touche du clavier identifié par val enregistre un front descendant.
ktrigger2?(val) : Vérifie si la touche du clavier identifié par val enregistre un front montant.
get_KeyParam() : Récupère l'Hash contenant les paramètre de touche permet l'utilisation des fonctions suivantes.
ppress?(key), ptrigger?(key) et ptrigger2?(key) : Même fonction que kpress?,ktrigger? ktrigger2? et mais en recherchant la valeur dans KeyParam.
enable_joy() : Active la gestion des joypads, cette gestion est désactivée par défauts.
disable_joy() : Désactive la gestion des joypads.
rx(id) : Retourne la position x du stick principal de la manette n°id, 127 position extrême droite, -128 position extrême gauche, 0 position de repos.
ry(id) : Retourne la position y du stick principal de la manette n°id, 127 position extrême bas, -128 position extrême haut, 0 position de repos.
lx(id),ly(id) : Même fonctions que rx et ry mais avec l'autre stick, attention, si la manette ne contient pas deux stick le retour pourrait être instable.
jpress?(id,key) : Vérifie si la touche key de la manette n°id est pressée, attention un joypad classique contient jusqu'à 16 touches. (Et n'en a pas toujours 16)
jtrigger?(id,key) : Vérifie si la touche key de la manette n°id enregistre un front montant.
mx : Position x de la souris sur l'écran.
my : Position y de la souris sur l'écran.
m_here?(x,y,width,height) : Vérifie si la souris se trouve dans un rectangle commençant à la position x,y et finissant à la position x+width,y+height.
m_in_rect?(rect) : Vérifie si la souris se trouve dans un Rect, même fonction que m_here mais en prenant un objet du type Rect.
m_in_viewport?(viewport) : Vérifie si la souris se trouve dans un viewport, prend en argument le Viewport.
m_in_sprite?(sprite) : Vérifie si la souris se trouve dans un Sprite. Attention, cette fonction ne gère pas les rotation.
m_in_sprite_plus?(sprite) : Vérifie si la souris se trouve dans un Sprite et est dans un pixel non transparent de celui-ci.
m_in_sprite_plus2?(sprite,al) : Vérifie si la souris se trouve dans un Sprite, si al=true alors ça vérifiera si la souris ne se trouve pas dans un pixel transparent. Cette fonction prend en compte le zoom du sprite.
m_in_window?(window) : Fonction inutile à ne jamais utiliser.

VI - Recommandations


Il est conseillé d'exécuter ces scripts qu'une seul fois, ceci ayant été prévu pour RMVX.Ace ne possèdent pas de protection évitant les bugs lors d'un appuis sur F12. Pour ce fait il faut soit coder un module chargeant les scripts à la place du RGSS_Player, soit mettre une condition dans tous les scripts (unless $RGSS_Loaded;script;end; avec $RGSS_Loaded=true au début du script Main).

Il est nécessaire d'avoir une version de NyukyAPI.dll pour obtenir la gestion des joysticks.
Si vous ne désirez pas l'utiliser, supprimez toute les lignes contenant NyukyAPI dans Kernel et supprimez la ligne 55.
Lien de téléchargement : http://www.mediafire.com/?sc3teylrxrlzcvd

VII - Crédits

Nyagato Nyuky : Codage des scripts et de la DLL.
Microsoft : APIs utilisés et VisualStudio 2012 ayant permis le codage/debug de la DLL.


Dernière édition par Nuri Yuri le Lun 4 Mar - 11:40 (2013); édité 4 fois
Revenir en haut
Facebook Twitter
Publicité






MessagePosté le: Sam 2 Mar - 22:49 (2013)    Sujet du message: Publicité

PublicitéSupprimer les publicités ?
Revenir en haut
Astox
Membre


Inscrit le: 16 Déc 2012
Messages: 68
Localisation: Sud Ouest

MessagePosté le: Sam 2 Mar - 23:27 (2013)    Sujet du message: Nyuky's Input

A le voilà Imbécile heureux, enfin les voilà plutôt ^^
Du coup, c'est juste quelques questions :
Tes instructions retourne la plupart des positions ou sont des observateurs. Cependant à qui doit t-on envoyer les éléments retourné dans le cas d'un clic? Car j'ai lu
Code:
alias :ori_press? :press? 
 alias :ori_trigger? :trigger?
et cela m'intrigue.


Une petite question de compréhension du code aussi : le script qui permet de crée des structures compatibles est la pour permettre l'utilisation d'API win32 c'est bien ça?

On avait discuté de la structure POINT qui est un des éléments fondamentaux du détecteur de position de souris. Peux tu détailler son fonctionnement? Car tu m'avais parler de l'utilisation d'une structure en string en ruby, cependant il me semble que l'API elle ne reçoit que une structure binaire.

Et enfin, comme je me suis pas beaucoup renseigné sur le compilateur : ton morceau sur les recommandations sont une sorte d'équivalent au bloc #IFNDEF #DEFINE #ENDIF pour le compilateur dans des langages comme C ou C++ ou c'est encore autre chose?

J'ai du mal à comprendre ce que tu appelles manettes et joypad, peux-tu imager ? ( J'ai une iddé mais je suis pas sur a 100% ^^" )

Sinon très très bon boulo, je vais l'implanté demain et essayé de comprendre le code pour voir si je peux m'en inspirer ^^
Revenir en haut
Nuri Yuri
Administrateur
Administrateur


Inscrit le: 15 Oct 2008
Messages: 6 383
~Entity~
Localisation: Nancy
Non renseigné (Visible...)
ID Steam: Nuri_Yuri

MessagePosté le: Sam 2 Mar - 23:46 (2013)    Sujet du message: Nyuky's Input

Un joypad c'est un gamepad avec un ou plusieurs joystick, un manette c'est le terme générique français pour désigner le joypad ou le gamepad.
Un string ruby c'est avant tout une chaine de caractère binaire, surtout en ruby 1.8, c'est beaucoup moins vrai en 1.9... D'ailleurs j'ai oublié les spécification du ruby 1.8, si tu veux utiliser le script ajoute :
Code:
class String
  alias :getbyte :[]
  alias :setbyte :[]=
end

Et le code qui t'intrigue était un aliasing que j'avais mis car dans mon projet les méthodes kpress? et ktrigger? sont nomée press? et trigger?. Je n'ai pas pensé à retirer ces deux lignes de code :B

Pour les fonctions concernant la souris, il est mieux de les appeler lors qu'un clique est réalisé pour éviter de provoquer des lags, comme tu vois "m_in_sprite?()" contient un code assez lourd.
Code:
if Input.kpress?(1)
  if(Input.m_in_sprite_plus?(@bouton) #supposons que c'est un sprite avec un bitmap
    print("Vous avez appuyé sur le bouton")
  end
end


Les conditions que je demande de poser sont en effet un équivalent pour les compilateur c/c++. Ça évite la recompilation du code.
Revenir en haut
Facebook Twitter
The_Doctor
Membre


Inscrit le: 08 Juil 2012
Messages: 261
Tueur de 2e zone
Localisation: quelque part dans l'univers

MessagePosté le: Sam 2 Mar - 23:52 (2013)    Sujet du message: Nyuky's Input

Je ne sais pas pourquoi j'ai rit quand j'ai lu Nyuky's Input

Sinon, je dit bravo Imbécile heureux , ça doit être vraiment beaucoup de boulot.
Revenir en haut
Astox
Membre


Inscrit le: 16 Déc 2012
Messages: 68
Localisation: Sud Ouest

MessagePosté le: Dim 3 Mar - 00:10 (2013)    Sujet du message: Nyuky's Input

D'accord, et pour la valeur de val dans ta condition , tu précise que pour la touche entrée : touche 13
Tu as une liste pour la correspondance avec d'autre valeur?
Et enfin, pourquoi à tu imbriqué une condition réagissant au clavier avec l'autre à la souris? Il faut le faire ou c'est juste une démonstration des appels ?
Revenir en haut
Nuri Yuri
Administrateur
Administrateur


Inscrit le: 15 Oct 2008
Messages: 6 383
~Entity~
Localisation: Nancy
Non renseigné (Visible...)
ID Steam: Nuri_Yuri

MessagePosté le: Dim 3 Mar - 00:39 (2013)    Sujet du message: Nyuky's Input

Oui, c'était si il y avait un clique gauche et si la souris était dans un sprite.
http://msdn.microsoft.com/en-us/library/ms927178.aspx
Revenir en haut
Facebook Twitter
The_Doctor
Membre


Inscrit le: 08 Juil 2012
Messages: 261
Tueur de 2e zone
Localisation: quelque part dans l'univers

MessagePosté le: Dim 3 Mar - 07:26 (2013)    Sujet du message: Nyuky's Input

Petit truc : J'ai une erreur dans le script Kernel lorsque j'allume mon jeu , après les crédit :

Script 'Kernel' ligne 42: SyntaxError occured.
Revenir en haut
Nuri Yuri
Administrateur
Administrateur


Inscrit le: 15 Oct 2008
Messages: 6 383
~Entity~
Localisation: Nancy
Non renseigné (Visible...)
ID Steam: Nuri_Yuri

MessagePosté le: Dim 3 Mar - 12:58 (2013)    Sujet du message: Nyuky's Input

T'as copié les scripts en citant ou d'un autre manière. (Citer est la seule façon de copier les scripts sans que ça bug).
Revenir en haut
Facebook Twitter
Astox
Membre


Inscrit le: 16 Déc 2012
Messages: 68
Localisation: Sud Ouest

MessagePosté le: Dim 3 Mar - 13:38 (2013)    Sujet du message: Nyuky's Input

Une coquille c'est glissé dans ton code il me semble Youri :
Ligne 136, script Imput :
Code:
(str2.getbyte(str.size-1)&(1<<key>Méthodes en rapport avec la souris   
Revenir en haut
The_Doctor
Membre


Inscrit le: 08 Juil 2012
Messages: 261
Tueur de 2e zone
Localisation: quelque part dans l'univers

MessagePosté le: Dim 3 Mar - 14:05 (2013)    Sujet du message: Nyuky's Input

J'ai toujours un petit problème , la ligne 265 de Input me bug Pleurnicheur

Le pire , c'est que c'est juste un end.
Revenir en haut
Nuri Yuri
Administrateur
Administrateur


Inscrit le: 15 Oct 2008
Messages: 6 383
~Entity~
Localisation: Nancy
Non renseigné (Visible...)
ID Steam: Nuri_Yuri

MessagePosté le: Dim 3 Mar - 14:32 (2013)    Sujet du message: Nyuky's Input

J'ai désactivé le HTML dans mon message (ça le formatais Regard lunaire).
Revenir en haut
Facebook Twitter
Astox
Membre


Inscrit le: 16 Déc 2012
Messages: 68
Localisation: Sud Ouest

MessagePosté le: Dim 3 Mar - 15:24 (2013)    Sujet du message: Nyuky's Input

Moi il me dit qu'il ne trouve pas la methode bitesize dans la classe Imput a cette ligne :
Code:
RegisterRawInputDevices.call(d+d2,2,d.bytesize); 


Je n'ai jamais vu ce bug qui ne génère pas de log en plus


Dernière édition par Astox le Dim 3 Mar - 15:33 (2013); édité 1 fois
Revenir en haut
The_Doctor
Membre


Inscrit le: 08 Juil 2012
Messages: 261
Tueur de 2e zone
Localisation: quelque part dans l'univers

MessagePosté le: Dim 3 Mar - 15:27 (2013)    Sujet du message: Nyuky's Input

Et encore une erreur ( j'ai l'impression que le player le fait exprès  Gros matou qui ronronne ).Donc , nouveau problème :


Revenir en haut
Nuri Yuri
Administrateur
Administrateur


Inscrit le: 15 Oct 2008
Messages: 6 383
~Entity~
Localisation: Nancy
Non renseigné (Visible...)
ID Steam: Nuri_Yuri

MessagePosté le: Dim 3 Mar - 18:32 (2013)    Sujet du message: Nyuky's Input

Nyan, ruby 1.9 tu tourne sur ruby 1.8 :B
Il faut avoir un patch de la classe string :
Code:
class String
  alias :getbyte :[]
  alias :setbyte :[]=
  alias :bytesize :size
end
Revenir en haut
Facebook Twitter
The_Doctor
Membre


Inscrit le: 08 Juil 2012
Messages: 261
Tueur de 2e zone
Localisation: quelque part dans l'univers

MessagePosté le: Dim 3 Mar - 20:04 (2013)    Sujet du message: Nyuky's Input

Question : On le met où le code ? ( Et oui , je suis un demeuré en script Gros matou qui ronronne )
Revenir en haut
Contenu Sponsorisé






MessagePosté le: Aujourd’hui à 02:13 (2017)    Sujet du message: Nyuky's Input

Revenir en haut
Montrer les messages depuis:   
Poster un nouveau sujet   Répondre au sujet    Pokémon Script Project Index du Forum -> Game Making -> Ressources techniques -> Scripts Toutes les heures sont au format GMT + 1 Heure
Aller à la page: 1, 2  >
Page 1 sur 2

 
Sauter vers:  

Index | Creer un forum | Forum gratuit d’entraide | Annuaire des forums gratuits | Signaler une violation | Conditions générales d'utilisation
Powered by phpBB © 2001, 2005 phpBB Group
Thème par Thomas et l'équipe de la refonte PSP 2012 (version 1.0)
Traduction par : phpBB-fr.com