Apprendre


Vous êtes
nouveau sur
Oniromancie?

Visite guidée
du site


Découvrir
RPG Maker

RM 95
RM 2000/2003
RM XP
RM VX/VX Ace
RM MV

Apprendre
RPG Maker

Guides
Tutoriels
Making-of

Dans le
Forum

Section Entraide

Tutos: Approximer les fonctions cos et (...) / News: RMN Music Pack 2 enfin sorti ! / Divers: RPG Maker Paper patch 1.5.6 / Interviews: FoxFiesta (Aurélien Dos (...) / News: Alex d'or 2020 : Fin des tests et (...) / Chat

Bienvenue
visiteur !




publicité RPG Maker!

Statistiques

Liste des
membres


Contact

Mentions légales

164 connectés actuellement

10767792 visiteurs
depuis l'ouverture

9 visiteurs
aujourd'hui



Barre de séparation

Partenaires

Indiexpo

Akademiya RPG Maker

Hellsoft

Planète Glutko

Guelnika & E-magination

Lunae - le bazar d'Emz0

Leo-Games

Le Comptoir Du clickeur

Level Up!

Tous nos partenaires

Devenir
partenaire



forums

Index du forum > Entraide > [Scripts] Petites questions connes sur les SCRIPTS!!

Aller à la page 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

Reprise du message précédent:

AzRa - posté le 26/08/2019 à 16:31:20 (10516 messages postés)

❤ 0

ayop, le 28/05/2019 à 16:00:38 a dit:

Support : RMXP
Bonjour à tous,
[blabla]
Est-ce que vous auriez une solution ?


ayop, le 26/08/2019 à 16:26:10, après mille déboires, a dit:

Nickel ça marche super ! Merci beaucoup les gars ! :ange2


Ne perdez jamais l'espoir. Pareils aux lucioles dans la nuit, les anges volent vers la lumière.
- Metavy

阿彌陀佛, 阿彌陀佛, lève ton verre, lève ton verre !


Suite du sujet:

Gari - posté le 13/05/2020 à 15:01:01 (2312 messages postés) - staff

❤ 0

Support : RMXP

Question rapide, ce tuto permet de faire une rotation de sprite autour d'un centre en déplacement, sans erreur d'affichage.

Ma question concerne plus l'endroit où coller cette/ces portion(s) de code :

Citation:

Voilà le code (à mettre dans l'update du sprite) permettant de calculer les coordonnées "cartésiennes" suite à une rotation....
@old_angle correspond à l'angle d'origine de la rotation du sprite par rapport au centre.
@new_angle correspond au nouvel angle après la rotation.


A placer dans Game_Sprite ? A mettre, dans un event en appel de script ?

Citation:

rx = (self.x - x_centre)
ry = (self.y - y_centre)
diff = Math::PI * (@old_angle-@new_angle) / 180.0
r = Math.hypot(rx, ry)
@ang = Math.atan2(ry.to_f,rx.to_f)+diff
x = r * Math.cos(@ang)
y = r * Math.sin(@ang)
self.x = x.round + x_centre
self.y = y.round + y_centre
@old_angle = @new_angle


A placer tout seul au-dessus de Main ? En appel de script ?


gif - posté le 14/05/2020 à 10:28:59 (4376 messages postés) - staff

❤ 0

Ça va dans une méthode de classe oui : il doit y avoir une méthode "update" dans Game_Sprite. J'ai pas RMXP sous la main pour l'instant, si ça marche pas je testerai ce soir (Edit : ou demain :F).

C'est vrai que le tuto n'est pas bien clair :p.

Edit : Colle ça dans ton éditeur de script, dans une page vide, ça devrait te donner un exemple duquel tu peux t'inspirer :

EDIT :

Portion de code : Tout sélectionner

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
# Créer un nouveau sprite
spriteRotation = Sprite.new
 
# Position initiale du sprite
spriteRotation.x = 320
spriteRotation.y = 240
spriteRotation.z = 0
 
# Associer un bitmap faisant la taille de 100*150 pour l'exemple
spriteRotation.bitmap = Bitmap.new(100,150)
 
# Creation d'une couleur
blue = Color.new(0,0,255,255)
 
# Création de quelques alias utiles
w = spriteRotation.bitmap.width.to_f # largeur du sprite
h = spriteRotation.bitmap.height.to_f # longueur du sprite
r = Math.sqrt(w*w + h*h) / 2 # dist entre coin haut gauche et centre du sprite
originX = spriteRotation.x # position initiale axe X
originY = spriteRotation.y # position initiale axe Y
originTheta = Math.atan((w/2.0)/(h/2.0)) # angle entre longueur et diagonal
Pi = 3.14159
 
# Coloriage du sprite
spriteRotation.bitmap.fill_rect(0, 0, w, h, blue)
 
# angle de rotation (RADIAN)
angle = 0
 
# boucle infini
loop do
  
  # mise à jour de l'angle de rotation (RADIAN)
  angle += 0.05
  
  # Rotation du sprite (conversion RADIAN vers DEGREE)
  spriteRotation.angle = angle * 360 / (2 * Pi)
  
  # Calcul de la position du center du sprite
  centreX = originX + Math.sin(angle + originTheta) * r
  centreY = originY + Math.cos(angle + originTheta) * r
  
  # Calcul de l'offset a appliquer au coin haut gauche
  deltaX = centreX - (originX + w / 2.0)
  deltaY = (originY + (h / 2.0)) - centreY
  
  # Mise à jour de la position coin haut gauche
  spriteRotation.x = originX - deltaX
  spriteRotation.y = originY + deltaY
  
  # Mettre à jour les graphiques
  Graphics.update
  # Mettre à jour les entrés claviers
  Input.update
  # Sortir de la boucle, Si Echap est appuyé
  break if Input.trigger?(Input::B)     
end
 
# Libérer le sprite 
spriteRotation.dispose

Twitter | Cochouchou à la coupe du monde ! | le concours hebdomadaire du meilleur screen !


Gari - posté le 14/05/2020 à 11:00:25 (2312 messages postés) - staff

❤ 0

Ca fait un joli rectangle bleu sur fond noir. :pense

Ca me dit pas trop comment le premier fonctionne (désolé, c'est pour mettre à jour le script du dessus, pas pour un usage personnel :goutte)

Je suppose que l'objectif pour rendre ton script utilisable, ce serait que je crée un Class_Rotation pour éviter que ça se lance automatiquement et le code qui permettrait de faire ça par appel de script...


xvw - posté le 14/05/2020 à 11:34:41 (689 messages postés)

❤ 0

yo

Je pense qu'il vaut mieux supprimer le script. (Simplement);

mon blog


gif - posté le 14/05/2020 à 11:57:02 (4376 messages postés) - staff

❤ 0

Ah ok je croyais que c'était pour toi, du coup j'avais fais un exemple avec un rectangle bleu qui tourne sur lui même :F.

Ouais faudrait rendre ça plus générique.

Twitter | Cochouchou à la coupe du monde ! | le concours hebdomadaire du meilleur screen !


Gari - posté le 14/05/2020 à 12:23:46 (2312 messages postés) - staff

❤ 0

Non, je nettoie fais le ménage.

Désolé de t'avoir plébiscité pour pas grand-chose (dans la mesure où je ne ferai rien de ce mini script, n'étant pas... maker/programmeur). Mais merci quand même !
A défaut de pouvoir rajouter des choses, je pense que je dois pouvoir expliquer ce que tu as fait (à l'aide d'un cours de maths cve serait mieux, mais faudra se contenter de la version CE2). L'objectif du script posté sur Oniro était peut-être juste d'expliquer comment scripter une rotation sur XP (ce qui peut être intéressant pour créer des animations sans image, avec des collisions précises au pixel prêt, ou d'autresz trucs dont vous avez plus l'idée que moi).

Spoiler (cliquez pour afficher)


gif - posté le 14/05/2020 à 12:49:52 (4376 messages postés) - staff

❤ 0

Ok, je comprend mieux ce que tu veux faire :).

Du coup j'ai intégré ça dans la classe Sprite (script à coller au dessus de main) :

Spoiler (cliquez pour afficher)



Je l'utilise depuis un event pour l'exemple :
image

Ca donne ça une fois que je touche l'event :
image

On peut sûrement faire mieux, bien sur :sourire2.

Veux-tu que je mette à jour le tuto dans ce sens ?

Twitter | Cochouchou à la coupe du monde ! | le concours hebdomadaire du meilleur screen !


Gari - posté le 14/05/2020 à 13:46:35 (2312 messages postés) - staff

❤ 0

Oui, c'est l'idée (enfin c'est ce que je pense être voulu par le tuto à la base) !

Est-ce que ces deux lignes permettraient le déplacement du centre de rotation sur la carte ?

Citation:

self.x = x.round + x_centre
self.y = y.round + y_centre


Les positions x et y ont l'air d'être calculées selon la position de ce fameux centre.

Vu que le titre du tuto mentionne le centre mobile, ce serait juste bien de rajouter ça si ça a effectivement été montré (sinon juste le script comme tu l'as fait ce sera déjà très super bien, je suppose qu'il s'agissait surtout d'expliquer le principe de la rotation à la base).

J'ai quand même vérifié qu'aucun script identique similaire n'existait pour XP (serait peut-être temps Gari :doute6), et à priori non. Il y a quand même ce script de Fabien qui donne des méthodes pour déplacer des images, mais je ne pense pas que ce soit exactement la même chose.

Ce serait vraiment super si tu voulais bien refaire le tuto dans ce sens en tout cas (avec les explications) <3

xvw : J'aimerais tellement masquer (supprimer n'est pas une option), mais ma direction (les grands pontes tout là-haut) m'incite à une extrême prudence, surtout que je peux avoir la main un peu lourde quand je nettoie. :pfr


xvw - posté le 14/05/2020 à 13:57:38 (689 messages postés)

❤ 0

yo

Le tutoriel est discutablement pédagogique. Et même si la version de Gif est "plus user-friendly", elle nécéssite de comprendre la logique des Sprites (et donc par extension des Bitmaps). Et généralement, dès lors que l'on connait ça, l'implémentation du script devient assez évidente.

Pour améliorer le script, il faudrait ajouter sa représentation dynamique (dans Game_Picture, Game_Character etc.).

Ici, posé "plic ploc" comme ça, il n'apporte pas grand chose.

mon blog


Gari - posté le 14/05/2020 à 14:41:06 (2312 messages postés) - staff

❤ 0

Citation:

Pour améliorer le script, il faudrait ajouter sa représentation dynamique (dans Game_Picture, Game_Character etc.).



Tu veux dire faire en sorte d'adapter cette méthode pour les pictures, charset, etc ?
Est-ce que l'expliquer ne suffirait pas ? A partir du moment où la méthode de base a été expliquée, elle doit pouvoir être adptable un peu partout, non ?
Pour les charset et autres éléments regroupés sur un fichier commun, cela voudrait dire faire en sorte que seul le charset actif tourne, sans voir les autres éléments.

Ou peut-être que tu parles d'autre chose. (un schéma représentant l'objet en mouvement sur des cercles pour montrer la façon dont les angles progressent en fonction du déplacement ?)


xvw - posté le 14/05/2020 à 17:03:09 (689 messages postés)

❤ 0

yo

Citation:

Est-ce que l'expliquer ne suffirait pas


Je ne trouve pas... parce que la démarche passe à côté de "la manière de programmer pour RPGmaker". Je ne doute pas une seule seconde que l'auteur savait parfaitement "comment s'en servir". Mais ce tutoriel est, pour moi, une petite curiosité partagé entre "potes scripteurs". Ce qui le rend assez inutile car :

- un scripteur sait déjà comment l'implémenter
- un non scripteur ne comprendra pas comment s'en servir.

Expliquer l'approche de manière "moins concrètes" serait sans aucun doute "plus intéressant".

Citation:

Est-ce que l'expliquer ne suffirait pas ? A partir du moment où la méthode de base a été expliquée, elle doit pouvoir être adptable un peu partout, non ?



Dans RPGMaker, un script "ne modifie généralement pas directement le sprite". Il modifie une instance "dynamique" Game_quelquechose qui transmettra ses données à une instance de Sprite_quelquechose. Généralement, on voudrait que ce genre de transformation soit calculée dans la représentation dynamique (Game_xxx) et non visuelle (Sprite_xxx).

D'où le fait que pour moi, il faut soit :
- proposer un script qui implémente correctement ce que propose l'auteur et facile à prendre en main. Ce qui permettrait de réécrire le tutoriel en expliquant comment utiliser le script et eventuellement ajouter un point sur "comment fonctionne le script" (en introduisant la notion de coordonnées).
- soit simplement supprimer/archiver le tutoriel car il n'apporte pas grand chose.

mon blog


Gari - posté le 14/05/2020 à 18:13:34 (2312 messages postés) - staff

❤ 0

Je vais voir ce que gif propose. En l'état, le script a de toute manière été masqué, il n'est pas utilisable comme tel.

Citation:

Expliquer l'approche de manière "moins concrète" serait sans aucun doute "plus intéressant".


Je te sens motivé, là. :rit2 =>[]

Bon, assez ri, j'ai des tutos à latter.


gif - posté le 17/05/2020 à 15:28:12 (4376 messages postés) - staff

❤ 0

Je te proposerai quelque chose ce week-end :).

Edit : Voila ma proposition.

J'ai implémenté une méthode de rotation depuis la classe Game_Picture. C'est utilisable sur les images du coup et l'on peut choisir n'importe quel point de rotation : (script à placer au dessus de main)

Spoiler (cliquez pour afficher)



La méthode peut être utilisée par appel de script (depuis un event). Ci-dessous un exemple avec une rotation de l'image autour de son centre :

Portion de code : Tout sélectionner

1
2
3
4
5
6
7
  #--------------------------------------------------------------------------
  # * Change la vitesse de rotation de l'image
  #     a_x : position sur l'axe X du point de rotation
  #     a_y : position sur l'axe Y du point de rotation
  #     a_vitesse_rotation : vitesse de rotation (sens anti-horaire) de l'image
  #--------------------------------------------------------------------------
$game_screen.pictures[1].rotate(a_x, a_y, a_vitesse_rotation )



image

Résultat :
image

Ça manque d'illustration pour expliquer le processus et les calculs, mais je manque de temps aujourd'hui => je ferrai ça pendant le pont la semaine prochaine.

On part la dessus ?

Edit : ce que ça ne fait pas :
- Translation + rotation en même temps

Twitter | Cochouchou à la coupe du monde ! | le concours hebdomadaire du meilleur screen !


xvw - posté le 17/05/2020 à 15:31:25 (689 messages postés)

❤ 0

yo

Le fait de passer par une boucle est assez ennuyant. Est-ce que tu ne penses pas que ce serait mieux de t'inspirer de ce qui est fait pour la rotation (normale) (ou les changements de teintes) histoire de pouvoir l'activer/désactiver à la demande.

mon blog


gif - posté le 17/05/2020 à 15:41:29 (4376 messages postés) - staff

❤ 0

C'est une bonne idée :).

Edit : c'est fait. Ça peut encore être amélioré (voir édit post précédent).

Twitter | Cochouchou à la coupe du monde ! | le concours hebdomadaire du meilleur screen !


xvw - posté le 17/05/2020 à 23:13:36 (689 messages postés)

❤ 0

yo

C'est beaucoup mieux !
Par contre plusieurs points :
- je pense que le code ne devrait pas être un mélange entre Anglais et Français. (Et je dropperai les commentaires en Français, quitte à décrire les étapes en complément)
- ton code devrait utiliser des Alias pour ne pas répéter le code déjà existant. Déjà, ça réduira fortement ton code et en plus ça maximisera la comptabilité avec d'autres scripts.

mon blog


mamie - posté le 18/05/2020 à 00:09:17 (1491 messages postés)

❤ 0

Oui.

Mais du coup un alias ça permet d'écrire à la suite d'un code existant ?
Du genre

Portion de code : Tout sélectionner

1
2
3
4
5
6
7
def machin
   return foo
end
 
alias machin
   return bar
end


?_?
Et est-ce que ça permet d'écrire au milieu du code existant ?


xvw - posté le 18/05/2020 à 04:08:45 (689 messages postés)

❤ 1

yo

Ruby est un langage "ouvert", ça veut dire que tu peux modifier n'importe quelle classe en "ajoutant" des méthodes. Par exemple, imaginons qu'on ait cette classe :

Portion de code : Tout sélectionner

1
2
3
4
5
6
7
 
class Foo
  def bar
     p "Bar"
  end
end
 



Tu peux ajouter une méthode à la classe Foo dans un nouveau script :

Portion de code : Tout sélectionner

1
2
3
4
5
6
7
 
class Foo
  def foobar
     p "FooBar"
  end
end
 



Maintenant, la classe Foo a deux methodes (en plus du initialize/new). Ce qui veut dire que tu peux écraser une méthode qui existe déja :

Portion de code : Tout sélectionner

1
2
3
4
5
6
7
 
class Foo
  def bar
     p "Nouveau bar"
  end
end
 



Dorénavant quand tu appelleras :

Portion de code : Tout sélectionner

1
2
3
 
Foo.new.bar
 



Ça affichera (dans la console) "Nouveau bar".
Tout ça pourrait passer pour très dangereux (ce qui est d'ailleurs le cas) mais Ruby offre un mécanisme d'extension basé sur les alias.
Par exemple :

Portion de code : Tout sélectionner

1
2
3
4
5
6
7
8
9
10
 
class Foo
  alias_method :ancien_bar, :bar
  def bar
     p "J'appelle bar"
     ancien_bar
     p "J'ai appelé bar"
  end
end
 



Concrètement, la méthode `alias_method` permet de créer une copie d'une méthode en lui donnant un nouveau nom. De ce fait, il devient possible de l'appeler dans l'écrasement de l'ancienne méthode.

C'est primordiale quand on écrit un script parce que si on n'avait pas ce mécanisme d'alias, chaque personne modifiant un script rendrait l'ensemble des autres scripts incompatibles.
Ici, dans le script de Gif, si un Script avait été ajouté avant qui modifiait, par exemple, l'update de Game_picture (ce qui est le cas de RME par exemple), le script de Gif supprimerait toutes les modifications d'avant... ce qui est balot.

Donc concrètement, ça permet d'écrire du code "avant" et "après" une autre méthode. Pas "au milieu", cependant, le RGSS est suffisament bien découpé pour qu'il soit possible d'injecter du code à peu près où l'on veut.

Pour comprendre comment construire des scripts, je t'invite, si ça t'intéresse, à lire ces deux tutoriels (qui sont relativement accessibles) :

https://www.biloucorp.com/creation-dun-shifumi-avec-le-rgss3-16
https://www.biloucorp.com/creer-son-propre-systeme-de-quetes-partie-12-17

mon blog


Gari - posté le 18/05/2020 à 15:00:44 (2312 messages postés) - staff

❤ 0

C'est que ça prend forme tout ça. :ange2

Je connaissais l'alias comme réutilisateur d'ancienne méthode, mais je comprends un peu mieux pourquoi les gens préfèrent le RGSS3 pour les scripts.


xvw - posté le 19/05/2020 à 10:14:29 (689 messages postés)

❤ 0

yo

Tu fais référence aux tutoriels que j'ai posté en bas de message ?
Parce que les alias fonctionnent sur tout les RGSS.

mon blog


Gari - posté le 19/05/2020 à 10:33:42 (2312 messages postés) - staff

❤ 0

Non, je croyais qu'il s'agissait d'une généralité (RGSS3 qui utilise l'alias, et pas les autres) :F
(voilà ce que c'est de lire en diagonales)


mamie - posté le 19/05/2020 à 19:17:13 (1491 messages postés)

❤ 0

Oui.

Ok, merci pour l'explication xvw
généralement j'ai plutôt vu des alias utilisés comme des def
Comme ça ↓

Portion de code : Tout sélectionner

1
2
3
alias method
   p "foo"
end



Je me souviens pas d'avoir remarqué la méthode alias_method, mais j'ai juste pas fait attention je pense.


xvw - posté le 20/05/2020 à 10:12:24 (689 messages postés)

❤ 0

yo

Non, ça n'existe pas. Tu as peut être vu ça :

Portion de code : Tout sélectionner

1
2
3
4
5
6
7
8
 
class A 
  alias new_method old_method
  def old_method 
    ...
  end
end
 



Qui est, en terme de fonctionnement, identique à l'utilisation d'alias_method. Mais je privilégie toujours les méthodes plutôt que les instructions un peu magique (each au lieu de for par exemple). La seule exception que je fais, c'est l'utilisation de begin/rescue, if/else/etc et while/do while parce qu'on a rarement le choix.

mon blog


mamie - posté le 20/05/2020 à 14:19:03 (1491 messages postés)

❤ 0

Oui.

Ah oui ça doit être ça


gif - posté le 25/05/2020 à 18:28:36 (4376 messages postés) - staff

❤ 0

@Gari : J'ai terminé le code pour la rotation d'image (utilisation des alias + anglais):

Spoiler (cliquez pour afficher)



Script à placer au dessus de "main".

Fonctionne pas appel de script (exemple avec l'image d'ID 1):

Portion de code : Tout sélectionner

1
$game_screen.pictures[1].rotate(pointRotationX, pointRotationY, vitesseRotation)



Usage :
image

Résultat (avec un ptit point rouge juste pour l'exmple):
image

Ça convient ainsi ?

Twitter | Cochouchou à la coupe du monde ! | le concours hebdomadaire du meilleur screen !

Aller à la page 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

Index du forum > Entraide > [Scripts] Petites questions connes sur les SCRIPTS!!

repondre up

Marquer le sujet comme résolu

Suite à de nombreux abus, le post en invités a été désactivé. Veuillez vous inscrire si vous souhaitez participer à la conversation.

Haut de page

Merci de ne pas reproduire le contenu de ce site sans autorisation.
Contacter l'équipe - Mentions légales

Plan du site

Communauté: Accueil | Forum | Chat | Commentaires | News | Flash-news | Screen de la semaine | Sorties | Tests | Gaming-Live | Interviews | Galerie | OST | Blogs | Articles perso | Recherche
Apprendre: Visite guidée | RPG Maker 95 | RPG Maker 2003 | RPG Maker XP | RPG Maker VX | RPG Maker MV | Tutoriels | Guides | Making-of
Télécharger: Programmes | Scripts | Packs de ressources | Midis | Eléments séparés | Sprites
Jeux: Au hasard | Notre sélection | Sélection des membres | Jeux complets | Tous les jeux | Le cimetière | RPG Maker 95 | RPG Maker 2000 | RPG Maker 2003 | RPG Maker XP | RPG Maker VX | RPG Maker VX Ace | RPG Maker MV | Autres | Proposer
Ressources RPG Maker 2000/2003: Chipsets | Charsets | Panoramas | Backdrops | Facesets | Battle anims | Battle charsets | Monstres | Systems | Templates
Ressources RPG Maker XP: Tilesets | Autotiles | Characters | Battlers | Window skins | Icônes | Transitions | Fogs | Templates
Ressources RPG Maker VX: Tilesets | Charsets | Facesets | Systèmes
Ressources RPG Maker MV: Tilesets | Characters | Faces | Systèmes | Title | Battlebacks | Animations | SV/Ennemis
Archives: Palmarès | L'Annuaire | Livre d'or | Le Wiki | Divers