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

[Boite à outils] Interface tactile
Aller à la page: 1, 2, 3, 4  >
 
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
Sphinx
Scribe
Scribe


Inscrit le: 07 Jan 2008
Messages: 9 736
Localisation: Quelque part, dans le monde... Ou peut être sur une autre planète...
ID Steam: FaQuinator

MessagePosté le: Sam 3 Sep - 01:43 (2011)    Sujet du message: [Boite à outils] Interface tactile

[Boite à outils] Interface tactile



    I) Présentation

Bonjour à tous. Je suis parmi vous aujourd'hui pour présenter un petit outil qui pourrait servir aux développeurs d'interfaces : un script qui permettra de les rendre tactile ! En outre, je proposerai après un script qui vous permettra de tester le système.
Je précise que le système de tactile est compatible toutes versions, l'interface de test est compatible avec 0.7 & 4G+ (écran de jeu de 640*480)

    II) Installation

Comme pour tout système aussi complexe que le tactile, l'installation est extrêmement ardue... Ou pas =')
Hey ! Restez ! Je plaisantais !

Code:
#=======================================================================
# Mouse par Zeus 81 - Amélioré par Sphinx
#
# Versions :
#   ¤ version 1.3 : 28 Août 2011
#
# Credits demandes :
#   ¤ Sphinx (Gestion des sprites et prise en compte de la transparence)
#   ¤ Zeus 81 (Gestion de la souris)
#
# Explication du script by Zeus 81, mises à jour par Sphinx pour les adapter à ses
# modifiactions :
#      Il y a trois touches possibles : Mouse::LEFT, Mouse::RIGHT et Mouse::MIDDLE
#      pour respectivement clic gauche, clic droit et clic milieu.
#      Vous pouvez trouvez les fonctions trigger?, press? et repeat? comme dans Input
#      Mais aussi Mouse.release?(key) pour voir si une touche est relachée
#      et Mouse.double_trigger?(key) pour les double clics.
#      On récupère les coordonnées du curseur avec Mouse.x et Mouse.y
#      On peut aussi déplacer le curseur avec Mouse.x = new_x et Mouse.y = new_y
#      Pour afficher le curseur : Mouse.enable
#      Pour masquer le curseur : Mouse.disable
#      L'apparence du curseur peut être modifiée en mettant un fichier nommé
#      "curseur.png" dans "Graphics/Pictures/"
#      Enfin il ne faut pas oublier de faire un Mouse.update à chaque frame.
#=======================================================================
module Mouse
  LEFT = 1
  RIGHT = 2
  MIDDLE = 4
  open('Game.ini') {|file| file.read[/Title=(.+)\n/]}
  HWnd = Win32API.new('user32', 'FindWindow', 'PP', 'L').call('RGSS Player', $1) or nil
  GetDoubleClickTime = Win32API.new('user32', 'GetDoubleClickTime', '', 'I') or nil
  GetCursorPos = Win32API.new('user32', 'GetCursorPos', 'P', 'I') or nil
  SetCursorPos = Win32API.new('user32', 'SetCursorPos', 'ii', 'I') or nil
  ScreenToClient = Win32API.new('user32', 'ScreenToClient', 'LP', 'I') or nil
  ShowCursor = Win32API.new('user32', 'ShowCursor', 'i', 'I' ) or nil
  GetKeyState = Win32API.new('user32', 'GetKeyState', 'I', 'I') or nil
  Cursor = Sprite.new
 
  # Initialise les données de la souris (dont le curseur)
  def self.init
    Cursor.visible = false
    Cursor.z = 0xFFFF
    begin
      Cursor.bitmap = RPG::Cache.picture('curseur')
    rescue Errno::ENOENT
      # Si le fichier curseur.png n'existe pas
      Cursor.bitmap = Bitmap.new(8, 8)
      Cursor.bitmap.fill_rect(0, 0, 3, 7, Color.new(0,0,0))
      Cursor.bitmap.fill_rect(0, 0, 7, 3, Color.new(0,0,0))
      Cursor.bitmap.fill_rect(5, 5, 3, 3, Color.new(0,0,0))
      Cursor.bitmap.fill_rect(1, 1, 1, 5, Color.new(255,255,255))
      Cursor.bitmap.fill_rect(1, 1, 5, 1, Color.new(255,255,255))
      Cursor.bitmap.fill_rect(6, 6, 1, 1, Color.new(255,255,255))
    end
    @pos    = Array.new(2, 0)
    @pos_buffer = @pos.pack('i*')
    @states   = {LEFT=>[0, 0], RIGHT=>[0, 0], MIDDLE=>[0, 0]}
  end
 
  # Met à jour la souris (ainsi que les sprites interactifs)
  def self.update
    GetCursorPos.call(@pos_buffer)
    @pos = @pos_buffer.unpack('i*')
    ScreenToClient.call(HWnd, @pos_buffer)
    Cursor.x, Cursor.y = @pos_buffer.unpack('i*')
    time = Graphics.frame_count-GetDoubleClickTime.call*Graphics.frame_rate/1000
    for key in @states.keys
      if GetKeyState.call(key)[15] == 1
        @states[key][0] += 1
      elsif @states[key][0] > 0
        @states[key][0] = -1
      else
        @states[key][0] = 0
      end
      if @states[key][1] > time
        @states[key][1] = -1 if @states[key][0] == 1
      else
        @states[key][1] = (@states[key][0] == 1 ? Graphics.frame_count : 0)
      end
    end
   
    for is in ISprite.sprites
      next unless is.visible
      if is.onDrag
        is.endDrag if release?(LEFT)
      elsif is.estSurvole? and is.dragable?
        is.startDrag if press?(LEFT)
      end
      is.update
    end
  end
 
  # Fonctions identiques à celles du module Input
  def self.press?(key)
    return (@states[key][0] and @states[key][0] > 0)
  end
 
  def self.trigger?(key)
    return (@states[key][0] and @states[key][0] == 1)
  end
 
  def self.repeat?(key)
    case @states[key][0]
    when 1
      return true
    when nil
    when -1
    when 0
    when 2...Graphics.frame_rate / 10 * 4
      return false
    else
      return (@states[key][0] % (Graphics.frame_rate/10) == 0)
    end
  end
 
  # Retourne true en cas de double clic, false sinon
  def self.double_trigger?(key)
    return (@states[key][0] and @states[key][1] == -1)
  end
 
  # Retourne true si la souris est relachée
  def self.release?(key)
    return (@states[key][0] and @states[key][0] == -1)
  end
 
  # Retourne la coordonnée X du curseur
  def self.x
    return Cursor.x
  end
 
  # Définit la coordonnée X du curseur
  def self.x=(x)
    @pos[0] += x - Cursor.x
    Cursor.x = x
    SetCursorPos.call(*@pos)
  end
 
  # Retourne la coordonnée Y du curseur
  def self.y
    return Cursor.y
  end
 
  # Définit la coordonnée Y du curseur
  def self.y=(y)
    @pos[1] += y - Cursor.y
    Cursor.y = y
    SetCursorPos.call(*@pos)
  end
 
  # Active le curseur (l'affiche)
  def self.enable
    self.visible = true
  end
 
  # Désactive le curseur (le masque)
  def self.disable
    self.visible = false
  end
 
  # Retourne true si le curseur est visible, false sinon
  def self.visible
    return Cursor.visible
  end
 
  # Définit si le curseur doit être visible, ou non
  def self.visible=(visible)
    loop do
      if (visible and ShowCursor.call(0) < 0) or (not(visible) and ShowCursor.call(1) > 0)
        break
      end
    end
    Cursor.visible = visible
  end
end
Mouse.init

Code:
#=======================================================================
# SpriteInteractif écrit par Sphinx
#   Permet de gérer très simplement les interactions entre la souris et le sprite (survol, clic,
#   double-clic) et inclut également la possibilité de rendre les sprites déplacables.
#   
#   Méthodes disponibles :
#     + ISprite.new          : Crée un sprite non déplacable
#     + ISprite.new(true) : Crée un sprite déplacable
#     
#     ¤ mouseOut = Bitmap     : Définit le bitmap affiché. A utiliser à la place de bitmap= !
#     ¤ mouseOver = Bitmap   : Définit le bitmap affiché uniquement en cas de survol
#     ¤ dispose                          : Détruit le sprite (ne bug pas si le sprite est déjà détruit)
#     ¤ estClique?                     : Retourne true si le joueur clique sur le sprite, false sinon
#     ¤ estDbClique?                : Retourne true si le joueur double-clique sur le sprite, false sinon
#     ¤ estSurvole?                   : Retourne true si le joueur a sa souris sur le sprite, false sinon
#     ¤ dragable?                      : Retourne true si le sprite peut être déplacé, false sinon
#     ¤ onDrag                           : Retourne true si le sprite est en déplacement, false sinon
#     
#     + Les autres méthodes déclarées dans cette classe servent à la gestion interne du sprite.
#        Il est donc fortement déconseillé de les utiliser sans savoir très précisément ce que
#        vous faites.
#   
# Versions :
#   ¤ version 1.0 : 29 Août 2011
#
# Credits demandes :
#   ¤ Sphinx (élaboration du système d'échange)
#=======================================================================
class ISprite < Sprite
  # Crée un sprite interactif
  def initialize(dragable = false, viewport = nil)
    @dragable = dragable
    super(viewport)
    @id = nil
    @mouseOut = nil
    @mouseOver = nil
    @drag = false
    @cursor = {"x" => 0, "y" => 0}
    @@SPRITES.push(self)
    @@SPRITES.sort! {|a, b| a.z < = > b.z}
    @@SPRITES.reverse!
  end
 
  # Définit le bitmap par défaut
  def mouseOut=(bitmap)
    @mouseOut = bitmap
    self.bitmap = @mouseOut
  end
 
  # Définit le bitmap au survol (si aucun bitmap particulier pour le survol n'est défini, c'est
  # le bitmap par défaut qui sera utilisé)
  def mouseOver=(bitmap)
    @mouseOver = bitmap
  end
 
  # Détruit le sprite interactif.
  def dispose
    return if disposed?
    @@SPRITES.delete(self)
    super
  end
 
  # Retourne true si le joueur a cliqué sur le sprite interactif. false sinon.
  # NB : les sprites déplacables NE SONT PAS CLIQUABLES !
  def estClique?
    if dragable?
      # Si le sprite est cliquable, retourne toujours false.
      return false
    end
   
    if Mouse.trigger?(Mouse::LEFT) and estSurvole?
      # Si le joueur fait un clic gauche sur le sprite, retourne true.
      return true
    else
      # Sinon, retourne false.
      return false
    end
  end
 
  # Retourne true si le joueur a double cliqué sur le sprite interactif. false sinon.
  # NB : Les sprites déplacables sont double cliquables
  def estDbClique?
    if Mouse.double_trigger?(Mouse::LEFT) and estSurvole?
      # Si le joueur fait un double clic gauche sur le sprite, retourne true.
      return true
    else
      # Sinon, retourne false.
      return false
    end
  end
 
  # Retourne true si le joueur passe sa souris sur le sprite interactif. false sinon.
  # Tient compte de la superposition des sprites (le survol ne concernera que le sprite du
  # dessus)
  def estSurvole?
    unless @@LOCK.nil?
      # Si un sprite est en déplacement, seul ce sprite est survolable et survolé.
      return @@LOCK == self
    end
   
    # Sinon, je parcours l'ensemble des sprites interactifs, triés par ordre décroissant de
    # superposition (z) :
    for iSprite in @@SPRITES
      # Si le sprite n'est pas visible, je passe au suivant.
      next unless iSprite.visible
     
      if iSprite == self
        # Si j'arrive au sprite courant, alors je sors de la boucle.
        break
      end
     
      if iSprite.mouseOver?
        # Si un sprite au dessus est survolé, je retourne false.
        return false
      end
    end
   
    if mouseOver?
      # Si aucun sprite au dessus du sprite courant n'est survolé, alors je teste si la souris
      # est au dessus, et si elle n'est pas sur un pixel transparent. Si toutes ces conditions
      # sont remplies, alors je retourne true.
      return true
    else
      # Sinon, je retourne false.
      return false
    end
  end
 
  # Retourne true si le sprite interactif est déplacable. false sinon.
  def dragable?
    return (@dragable and (@@LOCK.nil? or @@LOCK == self))
  end
 
  # Retourne true si le sprite interactif est en train d'être déplassé. false sinon.
  def onDrag
    return (dragable? and @drag)
  end
 
  #=====================================================================#
  #               GESTION INTERNE DU SPRITE INTERACTIF                  #
  #=====================================================================#
 
  # Utilisé par Mouse.update
  @@SPRITES = []
  @@LOCK = nil
  def self.sprites
    return @@SPRITES
  end
 
  def bitmap=(bitmap)
    @id = bitmap.id
    super(bitmap)
  end
 
  def startDrag
    @drag = true
    @cursor = {"x" => self.x - Mouse.x, "y" => self.y - Mouse.y}
    @@LOCK = self
  end
 
  def endDrag
    @drag = false
    @cursor = {"x" => 0, "y" => 0}
    @@LOCK = nil
  end
 
  def mouseOver?
      x = self.x - self.ox
      y = self.y - self.oy
      return ((Mouse.x).bornes(x, x + self.bitmap.width - 1) and
                  (Mouse.y).bornes(y, y + self.bitmap.height - 1) and
                  self.bitmap.get_pixel(Mouse.x - x, Mouse.y - y).alpha > 0)
  end
 
  def update
    if onDrag
      if @id != (@mouseOver.nil? ? @mouseOut : @mouseOver).id
        self.bitmap = (@mouseOver.nil? ? @mouseOut : @mouseOver)
      end
      self.x = Mouse.x + @cursor["x"]
      self.y = Mouse.y + @cursor["y"]
    end
    if estSurvole? and not @mouseOver.nil? and @id != @mouseOver.id
      self.bitmap = @mouseOver
    elsif (not estSurvole? or @mouseOver.nil?) and @id != @mouseOut.id
      self.bitmap = @mouseOut
    end
    super
  end
end


Voici deux scripts... Il suffit de les coller au dessus de Main. Le premier script, Mouse, a été écrit par Zeus81, et amélioré par mes soins. Le second, ISprite, est de moi. Les sprites interactifs gèrent automatiquement la souris.

    III) Interface d'exemple

Afin de pouvoir tester ce script, je vous propose une interface de test qui exploite les différentes options du tactile (sprite cliquable & dbcliquable, sprite déplacable) :
Code:
#=======================================================================
# Interface_Tactile par Sphinx
#
# Versions :
#   ¤ version 1.0 : 28 Août 2011
#
# Credits demandes :
#   ¤ Sphinx
#
# Interface de test du système de tactile
# Les boules de billard sont placées au hasard dans la fenêtre. Ces images font 75 pixels de
# large & 75 pixels de haut, donc je place le coin haut/gauche au hasard entre les
# coordonnées (0 ; 0) et (640 - 75 ; 380 - 75)
# NB : Les sprites déplacables ne sont pas cliquables
#=======================================================================
class Interface_Tactile
  def initialize
    # Un sprite classique, pour le fond de l'interface
    @fond = Sprite.new
    @fond.bitmap = RPG::Cache.picture("fond_interface_tactile.png")
    @fond.z = 500
   
    # Elément déplacable 1 : boule de billard n°2
    #   image normale : boule_2.png
    #   image au survol : boule_1.png
    @boule2 = ISprite.new(true)
    @boule2.mouseOut = RPG::Cache.picture("boule_2.png")
    @boule2.mouseOver = RPG::Cache.picture("boule_1.png")
    @boule2.x = rand(565)
    @boule2.y = rand(305)
    @boule2.z = 550
    # Elément déplacable 2 : boule de billard n°3
    #   image normale : boule_3.png
    #   image au survol : boule_1.png
    @boule3 = ISprite.new(true)
    @boule3.mouseOut = RPG::Cache.picture("boule_3.png")
    @boule3.mouseOver = RPG::Cache.picture("boule_1.png")
    @boule3.x = rand(565)
    @boule3.y = rand(305)
    @boule3.z = 600
    # Elément déplacable 3 : boule de billard n°5
    #   image normale : boule_5.png
    #   image au survol : aucune
    @boule5 = ISprite.new(true)
    @boule5.mouseOut = RPG::Cache.picture("boule_5.png")
    @boule5.x = rand(565)
    @boule5.y = rand(305)
    @boule5.z = 650
    # Elément déplacable 4 : boule de billard n°6
    #   image normale : boule_6.png
    #   image au survol : boule_1.png
    @boule6 = ISprite.new(true)
    @boule6.mouseOut = RPG::Cache.picture("boule_6.png")
    @boule6.mouseOver = RPG::Cache.picture("boule_1.png")
    @boule6.x = rand(565)
    @boule6.y = rand(305)
    @boule6.z = 700
    # Elément déplacable 5 : boule de billard n°8
    #   image normale : boule_8.png
    #   image au survol : aucune
    @boule8 = ISprite.new(true)
    @boule8.mouseOut = RPG::Cache.picture("boule_8.png")
    @boule8.x = rand(565)
    @boule8.y = rand(305)
    @boule8.z = 750
   
    # Elément non déplacable 1 : boulon Valider
    #   image normale : bouton_ok.png
    #   image au survol : bouton_ok_survol.png
    @bouton1 = ISprite.new
    @bouton1.mouseOut = RPG::Cache.picture("bouton_ok.png")
    @bouton1.mouseOver = RPG::Cache.picture("bouton_ok_survol.png")
    @bouton1.x = 110
    @bouton1.y = 396
    @bouton1.z = 800
    # Elément non déplacable 2 : boulon Annuler
    #   image normale : bouton_ko.png
    #   image au survol : bouton_ko_survol.png
    @bouton2 = ISprite.new
    @bouton2.mouseOut = RPG::Cache.picture("bouton_ko.png")
    @bouton2.mouseOver = RPG::Cache.picture("bouton_ko_survol.png")
    @bouton2.x = 430
    @bouton2.y = 396
    @bouton2.z = 800
   
    main
  end
 
  def main
    Mouse.enable
    loop do
      update
      tps = Time.now
      if @bouton1.estClique?
        print "Validation !"
      end
      if @bouton2.estClique?
        print "Annulation !"
      end
      break if Mouse.trigger?(Mouse::RIGHT)
    end
    Graphics.freeze
    @boule2.dispose
    @boule3.dispose
    @boule5.dispose
    @boule6.dispose
    @boule8.dispose
    @bouton1.dispose
    @bouton2.dispose
    @fond.dispose
    Mouse.disable
    Graphics.transition
  end
 
  def update
    Graphics.update
    Mouse.update
  end
end

Vous pourrez démarrer cette scène très simplement. Il vous suffira de placer cette commande dans un évent dans une insertion de script :
Code:
Interface_Tactile.new

Il vous faudra juste les images suivantes dans votre dossier Graphics/Pictures : images.zip
Pour sortir de la scène, il suffit de faire un clic droit n'importe où dans l'écran.

Dans cette archive, il y a entre autre l'image "curseur.png". C'est le nom de l'image que le script Mouse va rechercher dans le dossier Pictures. Si elle existe, c'est elle qui sera utilisée comme curseur. Sinon, un curseur par défaut sera créé.


    IV) Le mot de la fin

Voici la gestion du tactile que je propose. Elle est principalement à destination des scripteurs qui auront envie de créer des interfaces tactiles. C'est donc bien une boite à outils, avec un exemple de scripts pour aider ceux pour qui les explications en début de scripts ne suffiraient pas ^^


Dernière édition par Sphinx le Dim 25 Mar - 21:42 (2012); édité 7 fois
Revenir en haut
Publicité






MessagePosté le: Sam 3 Sep - 01:43 (2011)    Sujet du message: Publicité

PublicitéSupprimer les publicités ?
Revenir en haut
Pαlвσlѕку
Administrateur
Administrateur


Inscrit le: 17 Aoû 2008
Messages: 5 982
Masculin

MessagePosté le: Sam 3 Sep - 08:56 (2011)    Sujet du message: [Boite à outils] Interface tactile

Bien joué Sphinx. Imbécile heureux

Simple d'utilisation.
Revenir en haut
Skype
Suicune31
Membre


Inscrit le: 08 Aoû 2008
Messages: 1 161
Localisation: Haute-garonne (31)
Masculin

MessagePosté le: Sam 3 Sep - 10:11 (2011)    Sujet du message: [Boite à outils] Interface tactile

J'ai un bug à la ligne 40 du script "ISprite" :s Peut être un bug d’incompatibilité.

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 3 Sep - 10:13 (2011)    Sujet du message: [Boite à outils] Interface tactile

Pas mal si ce n'est que j'ai vu un truc monstrueux dans ISprite.
Code:
class ISprite < Sprite 
  # Crée un sprite interactif 
  def initialize(dragable = false) 
    @dragable = dragable 
    super() 

super() Le viewport s'est fait mangé ? :(
Un viewport est essentiel pour un sprite dans un interface, ça permet d'éviter les débordements sur l'écran, de le limiter et de pouvoir mettre un supériorité qui le distingue des autres sprites dans l'interface plutôt que des autres sprites des autres interfaces.
Code:
class Interface1
  def initialize
    @viewport=Viewport.new(0,0,640,80)
    @viewport.z=1000
    @sp_1=Sprite.new(@viewport)
    @sp_1.z=1 #Le plus bas
    @sp_2=Sprite.new(@viewport)
    @sp_2.z=2 #Supérieur au 1
    #[...]
  end
end

class Interface2
  def initialize
    @viewport=Viewport.new(13,93,256,80)
    @viewport.z=1001
    @sp_bouton=Sprite.new(@viewport)
    @sp_bouton.z=1 #Le plus bas
    @sp_text=Sprite.new(@viewport)
    @sp_text.z=2 #Supérieur au 1
    #[...]
  end
end

Est plus agréable que des sprites avec des z du genre 6359 222563 3325 après c'est la foire aux supériorités et entre les interfaces qui tournent en même temps c'est compliqué.
De plus les petit nombres sont plus claire et explicites.

Sinon, pour les mouse_over, j'y avais pas pensé :B, faudrait que j'ajoute ça dans mes classes.
J'espère que ton script servira à beaucoup de monde Petit saligaud mal élevé
Revenir en haut
Facebook Twitter
Sphinx
Scribe
Scribe


Inscrit le: 07 Jan 2008
Messages: 9 736
Localisation: Quelque part, dans le monde... Ou peut être sur une autre planète...
ID Steam: FaQuinator

MessagePosté le: Sam 3 Sep - 12:54 (2011)    Sujet du message: [Boite à outils] Interface tactile

Imbécile heureux En fait tu peux initialiser un Sprite sans Viewport. Et ne connaissant pas celui utilisé par défaut, j'ai préféré ne rien y mettre ^^

Perso je n'utilise jamais de viewport dans mes sprites, donc je n'ai qu'une connaissance très limitée à ce sujet x)
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 3 Sep - 13:05 (2011)    Sujet du message: [Boite à outils] Interface tactile

La valeur par défaut pour les viewport c'est nil, le Graphics considère qu'il n'y en as pas et affiche le sprite sans les calcules des coordonnées du viewport.
Je les utilise souvent car c'est plus pratique avec et que ça permet plus de choses que sans viewport.
Par exemple, faire un flash de tous les sprites dans un combat : viewport.flash(color, duration) plutot que de flasher tous les sprites les un après les autres.
Revenir en haut
Facebook Twitter
Suicune31
Membre


Inscrit le: 08 Aoû 2008
Messages: 1 161
Localisation: Haute-garonne (31)
Masculin

MessagePosté le: Sam 3 Sep - 13:28 (2011)    Sujet du message: [Boite à outils] Interface tactile

je ne suis pas un fantôme que je sache x)
Personne n'a une solution ?
Revenir en haut
Sphinx
Scribe
Scribe


Inscrit le: 07 Jan 2008
Messages: 9 736
Localisation: Quelque part, dans le monde... Ou peut être sur une autre planète...
ID Steam: FaQuinator

MessagePosté le: Sam 3 Sep - 14:13 (2011)    Sujet du message: [Boite à outils] Interface tactile

^^" Euh, bah là je ne vois pas le soucis en fait... Tu pourrais me montrer le bout de code où tu utilises un ISprite ?


=> Nouvelle version mise en ligne. Identique à l'ancienne, mais intègre maintenant les viewports (:p pour ceux qui, comme Yuri, en seraient fans)
Pour utiliser un viewport, il faut appeler l'ISprite comme ca :
Code:
ISprite.new(false, viewport) # pour un élément non déplacable
ISprite.new(true, viewport) # pour un élément déplacable





edit : Nouvelle version : meilleure gestion au survol (plus rapide que la précédente).
Revenir en haut
og_loc-TATOO
Membre


Inscrit le: 11 Oct 2009
Messages: 3 383
Sailor Maniac
Localisation: noitasilacol

MessagePosté le: Lun 5 Sep - 16:28 (2011)    Sujet du message: [Boite à outils] Interface tactile

Sphinx tu as oublié un "end" pour ta Class Isprite Imbécile heureux

Suicune31 a écrit:
J'ai un bug à la ligne 40 du script "ISprite" :s Peut être un bug d’incompatibilité.



Rajoute un "end" après le "end" de la ligne 42 (sans les guillemet) et décale le pour qu'il soit dans le même alignement que la Class Isprite Imbécile heureux
Revenir en haut
Sphinx
Scribe
Scribe


Inscrit le: 07 Jan 2008
Messages: 9 736
Localisation: Quelque part, dans le monde... Ou peut être sur une autre planète...
ID Steam: FaQuinator

MessagePosté le: Lun 5 Sep - 18:30 (2011)    Sujet du message: [Boite à outils] Interface tactile

^^" Euh, quel rapport entre une NoMethodError & une SyntaxError ?

PS : ligne 42 il ne manque pas de end Clin d'œil foireux
Revenir en haut
og_loc-TATOO
Membre


Inscrit le: 11 Oct 2009
Messages: 3 383
Sailor Maniac
Localisation: noitasilacol

MessagePosté le: Mar 6 Sep - 12:23 (2011)    Sujet du message: [Boite à outils] Interface tactile

Sphinx a écrit:
^^" Euh, quel rapport entre une NoMethodError & une SyntaxError ?

PS : ligne 42 il ne manque pas de end Clin d'œil foireux


Une classe s'écrit Class
End

Une méthode s'écrit def_methode
End

Y a toujours un End à la fin 42

Après je dit pas que sa résout le truc, mais bon sait-on jamais 42
(chui k1 débutant dns le script)


EDIT: Après j'dit sa.... J'dit rien x)
Revenir en haut
Sphinx
Scribe
Scribe


Inscrit le: 07 Jan 2008
Messages: 9 736
Localisation: Quelque part, dans le monde... Ou peut être sur une autre planète...
ID Steam: FaQuinator

MessagePosté le: Mar 6 Sep - 17:44 (2011)    Sujet du message: [Boite à outils] Interface tactile

x) Euh, oui mais relis mieux, je déclare plusieurs méthodes Clin d'œil foireux Ca explique que le end de fin de la classe se trouve nettement plus loin

=> ^^ En outre, l'oubli d'un end provoquerait une erreur de syntaxe (SyntaxError) tandis que l'erreur présentée ici est une méthode appelée mais non déclarée (NoMethodError)
Revenir en haut
og_loc-TATOO
Membre


Inscrit le: 11 Oct 2009
Messages: 3 383
Sailor Maniac
Localisation: noitasilacol

MessagePosté le: Mar 6 Sep - 21:09 (2011)    Sujet du message: [Boite à outils] Interface tactile

Sphinx a écrit:
x) Euh, oui mais relis mieux, je déclare plusieurs méthodes Clin d'œil foireux Ca explique que le end de fin de la classe se trouve nettement plus loin

=> ^^ En outre, l'oubli d'un end provoquerait une erreur de syntaxe (SyntaxError) tandis que l'erreur présentée ici est une méthode appelée mais non déclarée (NoMethodError)


Très juste, faute à moi de pas avoir tout lu Résignation man

Donc tu as dut mal définir ta méthode, ou pas bien placé Imbécile heureux
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: Mar 6 Sep - 21:25 (2011)    Sujet du message: [Boite à outils] Interface tactile

Non, c'est pas un problème du à ça.
Le bug viens du forum, il censure les <=> donc il faut remplacer dans @@SPRITES.sort! {|a, b| a.z <= b.z} le <= par un <=>.
Revenir en haut
Facebook Twitter
Sphinx
Scribe
Scribe


Inscrit le: 07 Jan 2008
Messages: 9 736
Localisation: Quelque part, dans le monde... Ou peut être sur une autre planète...
ID Steam: FaQuinator

MessagePosté le: Mer 7 Sep - 17:31 (2011)    Sujet du message: [Boite à outils] Interface tactile

J'ai ajouté des espaces entre <, = et >. Ca passe correctement sur le forum, du coup

En espérant que ca ne déclenchera pas une erreur de syntaxe. Vous pouvez reprendre le script du coup. Si ca passe, tant mieux, sinon il suffira de supprimer ces espaces :!
Revenir en haut
Contenu Sponsorisé






MessagePosté le: Aujourd’hui à 07:52 (2017)    Sujet du message: [Boite à outils] Interface tactile

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, 3, 4  >
Page 1 sur 4

 
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