Partagez
Aller en bas
avatar
Jungle
Membre

Nombre de messages : 30
Distinction : aucune
Date d'inscription : 28/08/2012

[Résolu] Width/Height d'un sprite.

le Mar 5 Fév 2013 - 16:37
Bonjour,

J'ai fais quelques recherche sur le forum, mais je n'ai pas trouvé de réponse à ma question que voici :

J'aimerais récupérer dans une variable, la largeur (Width) et l'hauteur (Heigth) d'un sprite (une barre de vie nottament), que j'ai importé dans mon projet.
Celle-ci étant "Vie_Verte".
Quelle ligne de code permet de récupérer ses caractéristiques d'une image importée ?

Mon but final étant de faire du calcul sur ces variables contenant les tailles de l'image afin de modifier la largeur de ma barre en fonction du besoin.

Ma demande est-elle assez claire ?
Merci d'avance.


Dernière édition par Jungle le Dim 10 Fév 2013 - 9:53, édité 1 fois
avatar
tonyryu
Membre

Nombre de messages : 895
Age : 38
Localisation : Près de Nantes
Distinction : aucune
Date d'inscription : 27/05/2010
http://www.tonyryudev.com

Re: [Résolu] Width/Height d'un sprite.

le Mar 5 Fév 2013 - 21:47
Sprite
The sprite class. Sprites are the basic concept used to display characters and other objects on the game screen.

Superclass
Object

Class Method

Sprite.new([viewport])
Creates a new sprite object. Specifies a viewport (Viewport) when necessary.

Methods
dispose
Frees the sprite. If the sprite has already been freed, does nothing.

disposed?
Returns TRUE if the sprite has been freed.

flash(color, duration)
Begins flashing the sprite. duration specifies the number of frames flashing will last.

If color is set to nil, the sprite will disappear while flashing.

update
Advances the sprite flash or wave phase. As a general rule, this method is called once per frame.

It is not necessary to call this if a flash or wave is not needed.

width
Gets the width of the sprite. Equivalent to src_rect.width.

height
Gets the height of the sprite. Equivalent to src_rect.height.

Properties
bitmap
Refers to the bitmap (Bitmap) used for the sprite's starting point.

src_rect
The box (Rect) taken from a bitmap.

viewport
Refers to the viewport (Viewport) associated with the sprite.

visible
The sprite's visibility. If TRUE, the sprite is visible. The default value is TRUE.

x
The sprite's x-coordinate.

y
The sprite's y-coordinate.

z
The sprite's z-coordinate. The larger the value, the closer to the player the sprite will be displayed.

If two sprites have the same z-coordinates, the one with the larger y-coordinate will be displayed closer to the player, and if the y-coordinates are the same, the one that was generated later will be displayed closer to the player.

ox
The x-coordinate of the sprite's starting point.

oy
The y-coordinate of the sprite's starting point.

zoom_x
The sprite's x-axis zoom level. 1.0 denotes actual pixel size.

zoom_y
The sprite's y-axis zoom level. 1.0 denotes actual pixel size.

angle
The sprite's angle of rotation. Specifies up to 360 degrees of counterclockwise rotation. However, drawing a rotated sprite is time-consuming, so avoid overuse.

wave_amp
wave_length
wave_speed
wave_phase

Defines the amplitude, frequency, speed, and phase of the wave effect. A raster scroll effect is achieved by using a sinusoidal function to draw the sprite with each line's horizontal position slightly different from the last.


wave_amp is the wave amplitude and wave_length is the wave frequency, and each is specified by a number of pixels.

wave_speed specifies the speed of the wave animation. The default is 360, and the larger the value, the faster the effect.

wave_phase specifies the phase of the top line of the sprite using an angle of up to 360 degrees. This is updated each time the update method is called. It is not necessary to use this property unless it is required for two sprites to have their wave effects synchronized.

mirror
A flag denoting the sprite has been flipped horizontally. If TRUE, the sprite will be drawn flipped. The default is false.

bush_depth
bush_opacity

The bush depth and opacity of a sprite. This can be used to represent a situation such as the character's legs being hidden by bushes.

For bush_depth, the number of pixels for the bush section is specified. The default value is 0.

For bush_opacity, the opacity of the bush section from 0 to 255 is specified. Out-of-range values will be corrected automatically. The default value is 128.

The bush_opacity value will be multiplied by opacity. For example, if both opacity and bush_opacity are set to 128, it will be handled as a transparency on top of a transparency, for an actual opacity of 64.

opacity
The sprite's opacity (0-255). Out-of-range values are automatically corrected.

blend_type
The sprite's blending mode (0: normal, 1: addition, 2: subtraction).

color
The color (Color) to be blended with the sprite. Alpha values are used in the blending ratio.

Handled separately from the color blended into a flash effect. However, the color with the higher alpha value when displayed will have the higher priority when blended.

tone
The sprite's color tone (Tone).
avatar
Zangther
Membre

Nombre de messages : 900
Distinction : aucune
Date d'inscription : 06/02/2013

Re: [Résolu] Width/Height d'un sprite.

le Mer 6 Fév 2013 - 13:53
En effet, tu peux utiliser les attributs de la classe Sprite.

Je ne connais pas ton niveau en programmation mais, si ta barre de vie n'est pas très compliquée à faire, tu ne penses pas que tu devrais utiliser les méthodes qui sont là pour tracer des barres ? Ce sera surement moins lourd et plus pratique étant donné que tu choisis directement les dimensions de la barre.

Dis moi quelle version de RPG maker tu utilises et je te dirais quelles méthodes utiliser (enfin après si tu débutes, oui reste avec l'image Wink)
avatar
Jungle
Membre

Nombre de messages : 30
Distinction : aucune
Date d'inscription : 28/08/2012

Re: [Résolu] Width/Height d'un sprite.

le Mer 6 Fév 2013 - 18:03
J'ai lu le message qui donne les informations sur la classe Sprite, mais je ne sais pas m'en servir, je débute en ruby. Pourrais-je avoir un exemple d'utilisation ?

J'ai tout de même des notions de programmation (C/C++ nottament), donc j'arrive plus ou moins à me référer dessus.
J'aimerais plutôt garder mon image que de tracer des barres style draw_line_color(x,y,width,height....), nottament niveau du skin de la barre.
J'utilise Rpg maker vx ace.
Il me faudrait juste le moyen de rentrer la width de ma picture dans une variable, afin de la modifier à volontée.

avatar
Zangther
Membre

Nombre de messages : 900
Distinction : aucune
Date d'inscription : 06/02/2013

Re: [Résolu] Width/Height d'un sprite.

le Mer 6 Fév 2013 - 19:14
Essaye de modifier les attributs width et height du bitmap de ton sprite.
avatar
Jungle
Membre

Nombre de messages : 30
Distinction : aucune
Date d'inscription : 28/08/2012

Re: [Résolu] Width/Height d'un sprite.

le Mer 6 Fév 2013 - 19:29
C'est précisement ce que j'aimerais faire, mais ma picture est-elle déclarée comme une sprite lors de son importation ?
Si oui comment utiliser les fonction citée au dessus ?
Quelque chose du genre : Widthsprite = spritename.width ?
avatar
Zangther
Membre

Nombre de messages : 900
Distinction : aucune
Date d'inscription : 06/02/2013

Re: [Résolu] Width/Height d'un sprite.

le Mer 6 Fév 2013 - 20:02
En gros, un sprite c'est pas vraiment ton image. Ton image c'est un bitmap. Ce bitmap est attaché à ton sprite.
Donc quand tu vas instancier ton sprite, il sera vide. Ce n'est qu'en lui attribuant un bitmap que tu auras ton image. Ensuite tu pourras modifier ton bitmap selon ton bon vouloir avec width et height qui devraient, si mon souvenir est exact, être modifiables.

Après selon ce que tu souhaites faire, si t'as besoin d'aide hésite pas à demander conseil en exposant ce que tu veux faire ici pour qu'on y réfléchisse ensemble Very Happy
avatar
Jungle
Membre

Nombre de messages : 30
Distinction : aucune
Date d'inscription : 28/08/2012

Re: [Résolu] Width/Height d'un sprite.

le Mer 6 Fév 2013 - 20:23
Ok d'accord.
Comment puis-je attribuer un bitmap à un sprite?
avatar
Zangther
Membre

Nombre de messages : 900
Distinction : aucune
Date d'inscription : 06/02/2013

Re: [Résolu] Width/Height d'un sprite.

le Mer 6 Fév 2013 - 21:45
Code:
sprite = Sprite.new # Création de ton sprite
sprite.bitmap = Bitmap.new("my_bitmap.png")
Un truc du genre. Hésite pas à regarder dans les autres scripts comment ils font pour t'en inspirer Smile
avatar
Jungle
Membre

Nombre de messages : 30
Distinction : aucune
Date d'inscription : 28/08/2012

Re: [Résolu] Width/Height d'un sprite.

le Jeu 7 Fév 2013 - 17:45
Hum, ok je vois!
Si j'arrive à déclarer mon bitmap comme sprite je pourrais alors utiliser les codes cités au dessus.
Je vais essayer d'avancer et je vous fais signe.


Edite :
En utilisant :

@sprite = Sprite_Base.new
@sprite.bitmap = Cache.system(Vie_Verte)
Life = @sprite.width
@bitmap.dispose
@sprite.dispose

Le compilateur m'indique qu'il ne parvient pas à trouver mon image, j'ai essayé en modifiant le chemin d'accés, mais bon.
Il ne trouve pas.


Dernière édition par Jungle le Jeu 7 Fév 2013 - 18:28, édité 1 fois
avatar
tonyryu
Membre

Nombre de messages : 895
Age : 38
Localisation : Près de Nantes
Distinction : aucune
Date d'inscription : 27/05/2010
http://www.tonyryudev.com

Re: [Résolu] Width/Height d'un sprite.

le Jeu 7 Fév 2013 - 18:07
La classe Sprite et la classe Bitmap, sont 2 classes différentes. Elles n'ont pas du tout le même fonctionnement.
La classe Bitmap te permet de charger les données de l'image en mémoire, la classe Sprite permet d'afficher à l'écran des données de dessin qui sont stocké dans une propriété bitmap.

C'est pour cela qu'un Bitmap n'a pas de propriété x ou y.

Comme le disait Zangther :
Code:
sprite = Sprite.new # Création de ton sprite
sprite.bitmap = Bitmap.new("my_bitmap.png")

mais tu peux également stocker le bitmap dans une variable indépendant.
Code:
bmp = Bitmap.new("my_bitmap.png")
sprite = Sprite.new # Création de ton sprite
sprite.bitmap = bmp

ATTENTION : Chose importante, ne pas oublier de libérer l'espace mémoire alloué pour un Bitmap quant on ne s'en sert plus via les méthodes dispose.
avatar
Zangther
Membre

Nombre de messages : 900
Distinction : aucune
Date d'inscription : 06/02/2013

Re: [Résolu] Width/Height d'un sprite.

le Ven 8 Fév 2013 - 19:23
Jungle > Il faut bien l'avoir mis dans le dossier adéquat. Si ton image est Graphics/System/mon_bitmap.png tu devrais faire cela : http://paste.awesom.eu/tld

Petites remarques en vrac :

@tonyryu a écrit:ATTENTION : Chose importante, ne pas oublier de libérer l'espace mémoire alloué pour un Bitmap quant on ne s'en sert plus via les méthodes dispose.
La méthode dispose ne libère pas l'espace mémoire, et d'ailleurs on ne gère pas la mémoire. Dans les langages haut niveau comme Ruby c'est le Garbage Collector qui s'en occupe.
Le dispose permet de dégager les éléments graphiques de l'écran quand on a fini de les utiliser. Ensuite, quand ils ne sont plus référencés ou un truc du genre, le GC va arriver et libérer.

@Jungle a écrit:Le compilateur
Ruby n'est pas compilé il est interprété Smile
avatar
tonyryu
Membre

Nombre de messages : 895
Age : 38
Localisation : Près de Nantes
Distinction : aucune
Date d'inscription : 27/05/2010
http://www.tonyryudev.com

Re: [Résolu] Width/Height d'un sprite.

le Ven 8 Fév 2013 - 20:35
Le RGSS est une extension Ruby codé en C++, dont la class Bitmap et Sprite, l'espace alloué doit être libéré.

Petit test très simple , en remplacement du main :
Code:
def create_bitmap
  bitmap = Bitmap.new("Graphics/System/Iconset")
end

while true
  create_bitmap
end

Lancer le projet et afficher le processus dans le gestionnaire de ressource pour voir la mémoire utiliser.

refaire la même chose avec ce code :
Code:
def create_bitmap
  bitmap = Bitmap.new("Graphics/System/Iconset")
  bitmap.dispose
end

while true
  create_bitmap
end

Pour que le garbage collector fasse le nécessaire dans ce cas, il faut le forcer :
Code:
def create_bitmap
  bitmap = Bitmap.new("Graphics/System/Iconset")
end

while true
  create_bitmap
  GC.start
end
Contenu sponsorisé

Re: [Résolu] Width/Height d'un sprite.

Revenir en haut
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum