Bienvenue visiteur !
|
Statistiques
Liste des membres
Contact
Mentions légales
552 connectés actuellement
29527510 visiteurs depuis l'ouverture
3574 visiteurs aujourd'hui
Partenaires
Tous nos partenaires
Devenir partenaire
|
Messages postés par TFk Nombre de messages référencés sur Oniromancie (non supprimés): 6 Aller à la page: 1
Posté dans Forum - Un petit script pour faire des barres facilement |
TFK -
posté le 29/01/2012 à 12:16:36. (6 messages postés) |
| Citation: j'en ai vu NULLE PART dans tes explications.
Réveille toi vieux.
|
Tu as tout à fait raison, pour quelqu'un qui ne connaîtrait rien à Ruby il n'y aurait aucun moyen de le remarquer.
Le
ne doit pas parler à tout le monde.
Il faut que je commente le code correctement, mais je ne sais pas trop quelles sont les best practices pour commenter en ruby, si tu connais un lien qui l'explique je serais très intéressé.
Citation: C'est bien, @last_value est tout le temps égal à nil.
Donc ça sert à rien. |
Merci de l'avoir signalé, je n'avais pas remarqué cette erreur, c'est corrigé.
|
Posté dans Forum - Un petit script pour faire des barres facilement |
TFK -
posté le 29/01/2012 à 12:04:57. (6 messages postés) |
| Pour rafraichir la barre, il suffit d'appeler la method refresh, je pense que c'est plutôt évident.
Le changement de contenu se fait au besoin dans la method refresh si "value" a changé.
Il faudrait comparer les perfs de ton algo avec celui d'Andres, car le tiens utilise des cos/sin, des flotant, etc..
|
Posté dans Forum - Un petit script pour faire des barres facilement |
TFK -
posté le 29/01/2012 à 12:02:10. (6 messages postés) |
| @Nagato Yuki: c'est ce qui est prévu, mais pour l'instant, l'idée d'une progress bar circulaire m'intéresse pas mal.
Voici la classe que j'ai implémenté avec des methods static pour dessiner des cercles facilement:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
class Circle
def self.draw_circle(r, color, bitmap,x_center, y_center)
x = 0
y = r
d = r - 1
while(y >= x)
bitmap.set_pixel(x + x_center, y + y_center, color)
bitmap.set_pixel(y+x_center, x+y_center,color)
bitmap.set_pixel(-x+x_center, y+y_center, color)
bitmap.set_pixel(-y+x_center, x+y_center, color)
bitmap.set_pixel(x+x_center, -y+y_center, color)
bitmap.set_pixel(y+x_center, -x+y_center, color)
bitmap.set_pixel(-x+x_center, -y+y_center, color)
bitmap.set_pixel(-y+y_center, -x+y_center, color)
if(d >= 2 * x)
d = d - 2 * x - 1
x+=1
elsif(d <= (2 * r - y))
d = d + 2 * y - 1
y-=1
else
d + 2 * (y - x - 1)
y = y -1
x +=1
end
end
return bitmap
end
def self.draw_circle_t(r, thickness, color, bitmap, x_center, y_center)
x = 0
while(x < thickness)
bitmap = Circle::draw_circle(r - x, color, bitmap, x_center, y_center)
x+=1
end
return bitmap
end
def self.draw_circle_d(inner_r, outer_r, inner_color, outer_color, bitmap, x_center, y_center)
bitmap = Color::draw_circle(inner_r, inner_color, bitmap, x_center, y_center)
bitmap = Color::draw_circle(outer_r, outer_color, bitmap, x_center, y_center)
return bitmap
end
end
|
L'algo utilisé vient de là: [url]http://fr.wikipedia.org/wiki/Algorithme_de_trac%C3%A9_de_cercle_d'Andres[/url] .
|
Posté dans Forum - Un petit script pour faire des barres facilement |
TFK -
posté le 29/01/2012 à 10:48:58. (6 messages postés) |
| Tout est réalisable en programmant
Après, c'est moins simple.
Est-ce qu'il existe une method dans RGSS pour dessiner des cercle ou je dois l'implémenter aussi ?
|
Posté dans Forum - Un petit script pour faire des barres facilement |
TFK -
posté le 29/01/2012 à 08:32:06. (6 messages postés) |
| Merci pour vos réponses,
je suis tout à fait d'accord avec le fait que la barre générée n'est pas très belle et que l'intérêt n'est pas flagrant.
Mais si dans votre jeu vous voulez faire une barre d'hp, une barre de mana, une barre d'xp, vous allez avoir déjà 3 events à faire (il me semble qu'ils ne sont pas rès performants d'ailleurs), 3 images à charger, gérer l'évolution de la barre px par px, soit en chargeant une image de 1px de long, soit en décalant sur le côté de l'écran (et là si votre barre d'xp est au milieu de l'écran, c'est le dawa).
Alors qu'en faisant:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
red_to_green = [Color.new(255, 0, 0, 255), Color.new(128, 128, 0, 255), Color.new(0, 255, 0, 255)]
blues = [Color.new(0, 0, 196), Color.new(0, 0, 255)]
purple = [Color.new(160, 32, 240)]
background = Color.new(128, 128, 128, 196)
border = Color.new(255, 255, 255, 255)
@hp_bar = Bar.new(20, 20, 180, 27, red_to_green, border, background, 100)
@mana_bar = Bar.new(20, 48, 150, 27, blues, border, background, 40)
@xp_bar = Bar.new(20, 76, 150, 17, purple, border, background, 60)
|
et dans un Update,
1
2
3
4
5
|
@hp_bar.refresh
@mana_bar.refresh
@xp_bar.refresh
|
En gros, si on ne compte pas les couleurs, ça prend 1 ligne par barre + 1 ligne pour refresh, ce qui permet de faire des barres très vite sans avoir à ouvrir photoshop ou autre.
Le résultat:
Je vais encore travailler sur cette classe (pour que les barres aient un meilleur design).
Il y a aussi quelques bugs que je corrige en ce moment
|
Posté dans Forum - Un petit script pour faire des barres facilement |
TFK -
posté le 29/01/2012 à 00:20:33. (6 messages postés) |
| Bonjour à tous, j'ai découvert assez récemment RM et comme je suis dev et que je souhaite créer un petit jeu avec, j'ai commencé à écrire quelques petits scripts.
Voici un script qui vous permet de faire une barre simple :
V 0.1
-début du script
V 0.2
-pleins de petits bugs corrigés
-quelques optimisation
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
|
class Bar
attr_accessor :value
attr_accessor :x
attr_accessor :y
attr_reader :width
attr_reader :height
attr_accessor :colors
attr_accessor :background_color
attr_reader :border_color
def initialize(x, y, width, height, colors, borderColor, backgroundColor, value)
@x = x
@y = y
@width = width
@height = height
@colors = colors
@border_color = borderColor
@background_color = backgroundColor
@value = value
@last_value = nil
@border = nil
@content = nil
end
def refresh()
unless @border
@border = Sprite.new
@border.bitmap = generate_border(@border_color)
@border.opacity = 255
@border.ox = 0
@border.oy = 0
end
unless @content
@content = Sprite.new
@content.opacity = 255
@content.ox = 0
@content.oy = 0
end
@border.x = @x
@border.y = @y
@content.x = @x + 1
@content.y = @y + 1
unless @last_value == @value
@content.bitmap = generate_content()
@last_value = @value
end
end
def generate_border(color)
border = Bitmap.new(@width, @height)
y = 0
while(y < @height)
# left border
border.set_pixel(0, y, color)
# right border
border.set_pixel(@width - 1, y, color)
y += 1
end
x = 1
while(x < @width)
# up border
border.set_pixel(x, 0, color)
# down border
border.set_pixel(x, @height - 1, color)
x += 1
end
return border
end
def generate_content()
width = @width - 2
height = @height - 2
val = (@value.to_f / 100)
content = Bitmap.new(width, height)
# Gets the color according to the value of the bar.
value = @value.to_f / 100 * @colors.length
while(value.floor > @colors.length - 1)
value -=1
end
while(value.floor < 0)
value += 1
end
color = @colors[value.floor]
# Fills the bar with the appropriate color
x = 0
while(x < width)
column_color = color
if(x > width * val)
column_color = @background_color
end
y = 0
while(y < height)
content.set_pixel(x, y, column_color)
y += 1
end
x += 1
end
return content
end
end
|
Il est très simple à utiliser et ne requiert aucune image.
Pour créer votre barre, il suffit de créer un objet Bar comme suit:
1
| my_bar = Bar.new(x, y, width, height, colors, border_color, background_color, value |
Avec
x = x du coin supérieur gauche de la barre
y = y du coin supérieur gauche de la barre
width = largeur de la barre (attention: 2px sont utilisés pour la bordure)
height = hauteur de la barre (attetion: 2px sont utilisés pour la bordure)
colors = un tableaudes couleurs de la barre (voir plus bas pour explications)
border_color = la couleur de la bordure (sous forme d'un Color)
background_color = la couleur de fond de la barre (uniquement visible sur la partie non remplie)
value = la valeur de la part, doit être entre 0 et 100 (inclus)
Le tableau de couleurs (colors) est utilisé pour changer la couleur de la part en fonction de sa valeur. Si il ne contient qu'une seule couleur, le remplissage se fera toujours avec celle-ci, si il contient deux couleurs, le remplissage se fera avec la première en dessous de 50% et avec la seconde au dessus, avec trois couleurs, la première sera utilisée entre 0 et 33%, la seconde lorsque la valeur dépasse 33% et la troisième lorsqu'elle dépasse 66%.
Quelques images avec une barre à 3 couleurs (rouge, jaune-vert, vert)
Il reste encore pas mal d'optimisation à faire, mais l'idée est là.
De nombreuses améliorations sont prévues notamment pour permettre via une autre classe de changer la façon dont la border et le contenu sont créés ainsi que pour permettre l'utilisation d'images pour créer des barres personnalisées & performantes très facilement.
| Aller à la page: 1
|
|
|