Aller à la page 1 2 3 4 5 6
Reprise du message précédent:
| Narrer l'autocatégorème | Le truc est en pause. :c
|
Quel RPG Maker choisir ? • Ocarina of Time PC • Polaris 03 | Suite du sujet:
| Narrer l'autocatégorème | J'ai repris la création de mon système et : la première étape fonctionne ! Elle consiste à afficher les îles quelque part sur l'axe x de la caméra en fonction de l'orientation du bateau (qui, pour le moment, est immobile).
Schéma représentant la position du bateau (le carré) et celle des îles (les croix), avec leurs coordonnées (x, y), sur la carte virtuelle :
Pour l'instant seule l'île du bas (94, 142) est affichée. Voici ce que ça donne :
Le compteur en bas à droite indique l'angle du bateau (0° = nord), il est bien sûr temporaire. L'île (le placeholder vert et rose) est affichée à sa taille maximale. Le sprite du bateau (le placeholder orange) déborde un peu sur celui de l'île, c'est voulu.
Avant d'aller plus loin je vais rajouter les deux autres îles, mais ça va être un peu long, car une fois l'évènement copié-collé il faut ensuite que je change les trouzemilles variables dans le code (chaque île utilise ses propres variables, c'est bien normal).
Voilà pour la première étape. La deuxième consistera à afficher l'île plus ou moins grande en fonction de sa distance. Et la troisième étape consistera à permettre au joueur de déplacer le bateau sur la map virtuelle.
|
Quel RPG Maker choisir ? • Ocarina of Time PC • Polaris 03 |
pepette -
posté le 22/11/2021 à 23:35:00 (61 messages postés)
| | Super !
J'ai hâte de voir la suite !
(je me demande comment tu vas gérer le positionnement des îles dans l'image en fonction de la distance)
|
| Narrer l'autocatégorème | Merci. La théorie c'est : calcul de la distance entre le bateau et l'île (via le théorème de Pythagore) puis zoom/dézoom de l'image en fonction de cette distance.
|
Quel RPG Maker choisir ? • Ocarina of Time PC • Polaris 03 |
Tassle -
posté le 23/11/2021 à 15:34:24 (5274 messages postés)
| Disciple de Pythagolf | Ça rend bien
Tu sais faire des racines carrées sur RM2k3 entre temps ? Sinon le plus simple pour avoir un résultat exact (à l'entier le plus proche en dessous) en ayant accès qu'aux opérations de bases et à la division entière c'est ce qu'on appelle une recherche par dichotomie:
Soit v la valeur dont je cherche la racine carrée.
Je pose lb = 0 et ub = v.
Tant que up-lb > 1:
... Je pose m = (ub+lb)/2
... Si m*m > v:
........ ub = m
.....Sinon:
........ lb = m
... (Fin du Si/Sinon)
(Fin du Tant que)
La valeur recherchée est alors lb.
Sachant que comme t'as une boucle ça peut prendre un peu de temps à calculer (avec tes coordonnées l'intérieur de la boucle peut s’exécuter jusqu'à une quinzaine de fois avant d'avoir la valeur recherchée). Mais ça dépend de RM ça (si c'est pas trop de la bouse ça devrait pas impacter la performance, ça reste très rapide à exécuter comme code).
Edit: En fait la méthode babylonienne sera probablement plus rapide:
Je pose x = v et y = 1.
Tant que x > y:
... x = (x+y)/2
... y = v/x
(Fin Tant que)
La valeur recherchée est alors x (ou y, c'est pareil).
|
~~ |
Ephy -
posté le 23/11/2021 à 16:06:29 (30101 messages postés)
- | [BIG SHOT] | Quand tu n'as pas accès aux racines carrés, c'est pas plus simple de tout raisonner en carré? Surtout si on travaille avec Pythagore.
|
Power Level: 1 148 355,38|Mystic Slayer (Value!+)|Le monde d'Adélaïde|Reikon no Yume|★ H-Project|Toho Danmaku Arena|Loli versus Ponies|Mes vidéos|Ma galerie|Débuter sur VX:10, 11|Tuto: Importation de ressources|Mapper avec les RTP VX|Touhou|Fan de Omenides|Fan de Estheone|Eph'ille: 14 |
Tassle -
posté le 23/11/2021 à 16:15:25 (5274 messages postés)
| Disciple de Pythagolf | Pour comparer des distances oui, mais pour le zoom ça risque d'être proportionnel à l'inverse de la distance (et pas de la distance au carré). Mais je suis pas sûr, j'ai pas essayé.
|
~~ |
| Narrer l'autocatégorème | Citation: Tu sais faire des racines carrées sur RM2k3 entre temps ? |
Non, et j'avais prévu de vous demander. x) Mais j'ai encore un peu de boulot (très simple mais long et chiant) pour ajouter deux îles (je veux maker la suite du truc avec trois îles tests au lieu d'une), donc j'ai encore un peu de temps avant de me pencher sur vos réponses. ^^ Merci quoi qu'il en soit !
|
Quel RPG Maker choisir ? • Ocarina of Time PC • Polaris 03 |
| Narrer l'autocatégorème | Je poste les deux images suivantes pour m'aider à y voir clair :
Donc, sous RM ça donnera :
variable1: = coordonnée x de l'île par rapport au bateau, mise en positif si négative (je possède déjà cette variable)
variable2: = idem mais pour y
variable1: *variable1
variable2: *variable2
variable1: +variable2
Bon, là j'ai la longueur que je cherche multipliée par elle-même, jusque-là pas de souci. C'est la suite que je ne comprends pas :
Citation: Je pose x = v et y = 1.
Tant que x > y:
... x = (x+y)/2
... y = v/x
(Fin Tant que)
La valeur recherchée est alors x (ou y, c'est pareil). |
À quoi correspondent v, x et y dans ton calcul ? Merci d'avance !
|
Quel RPG Maker choisir ? • Ocarina of Time PC • Polaris 03 |
Tassle -
posté le 24/11/2021 à 14:01:28 (5274 messages postés)
| Disciple de Pythagolf | v correspond à la valeur dont tu cherches la racine (ce que tu appelles variable1). x et y sont juste des variables qui à la fin contiendront la racine en question (aucun rapport avec les coordonnées des points, c'est juste un choix de nom malheureux de ma part).
Citation:
Avant d'aller plus loin je vais rajouter les deux autres îles, mais ça va être un peu long, car une fois l'évènement copié-collé il faut ensuite que je change les trouzemilles variables dans le code (chaque île utilise ses propres variables, c'est bien normal). |
Tu fais peut-être déjà ça, mais au cas où tu ne le ferais pas tu peux pas faciliter le copier coller en travaillant comme ça:
Supposons que j'ai un code qui fait plein de trucs sur des variables x_ile_1 et y_ile_1. Si je veux le code pour l'ile numero 2 je vais devoir changer tous les x_ile_1 en x_ile_2 et y_ile_1 en y_ile_2, c'est relou.
Mais si a la place je change mon code original pour qu'il travaille avec les variables x_ile_generique et y_ile_generique, je peux copier/coller le même code et j'aurais juste à mettre au-dessus un truc du genre "x_ile_generique = x_ile_1" et "y_ile_generique = y_ile_1".
Tu fais déjà ça ?
|
~~ |
| Narrer l'autocatégorème | Merci pour les explications !
Citation: Non. Mais, ça ne pose pas de problème que les variables génériques soient utilisées dans le calcul de plusieurs îles en même temps ? En effet, mes évènements d'îles sont calculés parallèlement, et non un après l'autre.
Citation: le zoom ça risque d'être proportionnel à l'inverse de la distance (et pas de la distance au carré). Mais je suis pas sûr, j'ai pas essayé. |
Alors, malheureusement ça ne sera pas si simple, enfin je ne pense pas.
L'image suivante représente le champ visuel vertical. L'angle n'est pas forcément bon mais ici ça n'a aucune importance (sauf erreur de ma part) :
L'objet rouge est éloigné de l'œil de manière régulière et on se rend compte que la diminution de taille apparente de l'objet diminue elle-même. Par exemple, avec le premier recul l'objet devient deux fois plus petit, alors qu'entre les deux derniers reculs il passe d'une taille d'1/7ème du champ visuel à 1/8ème.
Du coup, ça se traduit comment, concrètement ? Je crois qu'ill me faudrait un truc du genre :
si distance bateau-île = 0 alors zoom objet = 100%
si distance bateau-île = 1 alors zoom objet = [je sais pas quelle formule]%
Je sens que c'est simple mais je patauge quand même là.
|
Quel RPG Maker choisir ? • Ocarina of Time PC • Polaris 03 |
Zam -
posté le 24/11/2021 à 14:33:49 (5541 messages postés)
-
❤ 2Nemau Roi of the Suisse | | Citation: Non. Mais, ça ne pose pas de problème que les variables génériques soient utilisées dans le calcul de plusieurs îles en même temps ? En effet, mes évènements d'îles sont calculés parallèlement, et non un après l'autre. |
Petit secret : Rm2k3 est incapable de faire des opérations en parallèle. Tout se fait dans l'ordre, event par event (il passe au prochain event si il tombe sur un "Wait", si il arrive en bout de la liste des commandes ou qu'il touche la limite du nombre de commande d'event par frame codée en dur dans le moteur (10000 si mes souvenirs sont bons, c'est pour éviter que des boucles infinies ou trop longues fassent ramer le jeu)) .
|
Sylvanor -
posté le 24/11/2021 à 15:09:16 (24806 messages postés)
- | Le gars chiant qui rigole jamais (il paraît) | Curieux de voir ce que tu arrives à faire!
|
Les croissants croâssent en croix, s'ancrent ou à cent croîssent sans crocs à sang. Crois! Sens! ౡ |
| Chanter l'hyperchleuasme | Nemau a dit:
Du coup, ça se traduit comment, concrètement ? Je crois qu'ill me faudrait un truc du genre :
si distance bateau-île = 0 alors zoom objet = 100%
si distance bateau-île = 1 alors zoom objet = [je sais pas quelle formule]% |
Déjà, pour le zoom à 100% (en rouge), la distance n'est pas 0 mais 1. Regarde ton schéma, ce que tu appelles la taille de l'objet 100% est quand l'objet est à une distance de 1. Si la distance est vraiment zéro, l'objet prend une taille infinie. Arrange-toi pour qu'on ne puisse pas se rapprocher d'un objet avec une distance de 0. Ou alors n'affiche pas l'objet / définit une taille maximale.
La taille perçue de l'objet est :
taille_perçue = taille_réelle * distance_unitaire / distance_objet
Tu vois que plus l'objet est loin (distance_objet), plus la taille_perçue est petite.
|
Es-tu une star ? | Kujira no Hara | Muma|Rope | Polaris 03 | La 7e porte |
| Narrer l'autocatégorème | Citation: Petit secret : Rm2k3 est incapable de faire des opérations en parallèle. Tout se fait dans l'ordre, event par event (il passe au prochain event si il tombe sur un "Wait", si il arrive en bout de la liste des commandes ou qu'il touche la limite du nombre de commande d'event par frame codée en dur dans le moteur (10000 si mes souvenirs sont bons, c'est pour éviter que des boucles infinies ou trop longues fassent ramer le jeu)) . |
Oki, c'est bon à savoir, merci. Du coup je vais essayer en gardant les mêmes variables pour toutes les îles.
Citation: Arrange-toi pour qu'on ne puisse pas se rapprocher d'un objet avec une distance de 0. |
Oui. J'ai deux solutions :
- Empêcher le bateau d'avancer. Par exemple si l'île est aux coordonnées x15 y25, et que le bateau est aux coordonnées x15 y26 et qu'il est orienté vers le nord (genre angle compris entre 300° et 60°).
- Autoriser le bateau à traverser l'île. Dans ce cas-là : si les coordonnées de l'île et du bateau sont similaires, afficher l'île à 100% (ça rendra comme sur le gif plus haut). C'est la solution la plus simple.
Citation: taille_perçue = taille_réelle * distance_unitaire / distance_objet |
C'est quoi "distance unitaire" ?
|
Quel RPG Maker choisir ? • Ocarina of Time PC • Polaris 03 |
Joke -
posté le 24/11/2021 à 17:56:33 (5090 messages postés)
| Bilouteux fou | Je sais pas si ça peut t'aider mais pour Vaisseau 3D je faisais comme ça :
En utilisant la formule :
f(n) = FF'/(FF'+n*AB) × 100
FF' = 120
AB = 20
Je pense que dans ton cas si la distance est en pixel, AB vaut 1. Pour FF' c'est un peu indicatif... J'ai pris la moitié de la hauteur de l'écran et trouvé que c'était pas mal... peut-être que la moitié de la largeur de l'écran eût été mieux... La vérité est ailleurs...
Remarque inutile : avec AB = 1 et FF' = 120 tu peux savoir qu'à une distance de FF' * 99 =11880 ton image est affichée à zoom 1% et qu'au delà il faut pas qu'elle soit affichée car une image zoomée à 0% (absurdité) peut faire planter le jeu quand elle arrive hors de l'écran. De toute façon quelle que soit ta formule, tu peux ajouter une condition pour ne pas appliquer un zoom qui vaut 0.
C'est super audacieux ce que tu veux faire, bienvenue chez les fous.
|
biloumaster.fr, mon joli site ouèb tout bô tout frai ! |
| Chanter l'hyperchleuasme | Nemau a dit: C'est quoi "distance unitaire" ? |
Sur ton schéma, ça serait la distance entre deux lignes verticales. Dans ton jeu, ça serait une distance qu'on parcourt en faisant un pas. C'est une distance horizontale, arbitraire, avec laquelle tu mesures toutes les longueurs dans ton jeu.
Tu peux l'ignorer, dire qu'elle vaut 1, ou "1 mètre". C'est juste pour que les unités soient correctes dans la formule. Une manie de physicien.
|
Es-tu une star ? | Kujira no Hara | Muma|Rope | Polaris 03 | La 7e porte |
| Narrer l'autocatégorème | En me fiant à ce qu'ont dit Tassle et Zam et j'ai utilisé des variables génériques et ça marche tout bien ! Dorénavant je peux rajouter de nouvelles îles en quelques secondes.
Joke : merci beaucoup, par contre, ça m'a l'air compliqué pour le nul en maths que je suis. °°' Je pense que ça vient du fait que pour Vaisseau 3D tu as créé un système plus réaliste : de mémoire, quand on se déplace sur le côté, les éléments du fond se décalent moins vite que les éléments plus près. Dans mon système on ne pourra pas se déplacer sur le côté, ce qui le rend plus simple à créer.
Citation: C'est super audacieux ce que tu veux faire, bienvenue chez les fous. |
Merci. ^^ Attention quand même, ne vous imaginez pas un résultat final de ouf. Ce sera bien moins impressionnant que Vaisseau 3D par exemple.
RotS : oki.
|
Quel RPG Maker choisir ? • Ocarina of Time PC • Polaris 03 |
Joke -
posté le 25/11/2021 à 16:03:35 (5090 messages postés)
| Bilouteux fou | Nemau a dit: Joke : merci beaucoup, par contre, ça m'a l'air compliqué pour le nul en maths que je suis. °°' Je pense que ça vient du fait que pour Vaisseau 3D tu as créé un système plus réaliste : de mémoire, quand on se déplace sur le côté, les éléments du fond se décalent moins vite que les éléments plus près. Dans mon système on ne pourra pas se déplacer sur le côté, ce qui le rend plus simple à créer. |
Bah ton système n'est pas concerné par le décalage que j'ai dû faire vu que tu calcules les angles, mais en revanche le facteur de zoom c'est sensé être la même chose.
En gros je te disais que la formule pour toi serait :
Zoom de ton image = 100 x 120 / (120 + distance)
Avec 120, une valeur qui sort de mon trou de b...
Par contre je ne retrouve pas trop la formule de RotS, ici 120 correspond plutôt à une sorte de distance focale ou je ne sais quoi. La distance unitaire serait plutôt AB (20px) dans ma formule initiale mais encore ça diffère de la proposition de RotS.
Aussi contrairement à la formule de RotS, la mienne vient du souhait d'avoir un zoom égal à 100% à une distance de 0, et non un zoom infini. En gros tu dessine l'image telle que tu voudrais qu'elle soit affichée à l'écran quand ton bateau est pile dessus. Si tu compte faire des zooms supérieurs à 100%, tu change le "100" dans la formule par la valeur de zoom que tu veux avoir quand tu es pile sur l'objet.
Je suis une quiche en physique et mathématiques, alors j'ai mis des plombes pour trouver cette petite formule à partir du principe de dessin de perspective.
Il faut juste savoir que le rapport entre la distance et le zoom n'est pas linéaire, voici la gueule de ma formule sur un graphique :
|
biloumaster.fr, mon joli site ouèb tout bô tout frai ! |
Tassle -
posté le 25/11/2021 à 18:00:52 (5274 messages postés)
| Disciple de Pythagolf | Mathématiquement ça revient un peu au même, dans les deux cas (ta formule et celle de RotS) c'est une hyperbole (d'asymptote y=0). C'est juste que la tienne est un peu décalée vers la gauche (l'effet du +120) et qu'elle est normalisée pour valoir 100 en x=0 (l'effet du *120).
Mais en vrai un objet collé à ton œil il prend tout ton champ de vision (même si t'avais un champ de vision à 180 degrés), donc son image sur ta rétine est bien de taille infinie (en vrai quand tu passes en dessous de la distance focale minimale il n'y a même plus à proprement parler d'image, la lentille ne focalise plus les rayons lumineux venant d'un même point de l'objet et ceux-ci divergent).
|
~~ |
| Narrer l'autocatégorème | Oki oki. Je pense que je vais partir sur la formule de RotS, mais merci pour ces explications détaillées Joke. :3 (vous serez tous crédités ^^ si j'arrive à sortir quelque chose de présentable )
|
Quel RPG Maker choisir ? • Ocarina of Time PC • Polaris 03 |
| Narrer l'autocatégorème | Tassle a dit: Je pose x = v et y = 1.
Tant que x > y:
... x = (x+y)/2
... y = v/x
(Fin Tant que)
La valeur recherchée est alors x (ou y, c'est pareil).
[...]
v correspond à la valeur dont tu cherches la racine (ce que tu appelles variable1). x et y sont juste des variables qui à la fin contiendront la racine en question (aucun rapport avec les coordonnées des points, c'est juste un choix de nom malheureux de ma part). |
J'ai un souci, x devient un nombre pas mal plus petit que y. J'ai essayé de faire la moyenne de x et y pour voir si elle correspondait à la racine attendue, et avec la première île ça fonctionne, l'écart est de moins de 1 (38 pour une racine devant normalement faire 38.6), mais avec la deuxième l'écart est d'environ 4 (80,5 pour une racine devant normalement faire 84,9).
Est-ce normal ? Au pire c'est pas mal, mais si c'est possible d'avoir mieux je suis preneur.
Voici mon code, peut-être le souci vient-il de là (ce ne serait pas étonnant) :
r1a (ce que tu as nommé "x"): = d (cette variable "d" contient la distance que je cherche, au carré)
r1b (idem car j'en ai besoin deux fois, cf. plus bas): = d
r2a (ton "v"): = d
r2b (idem, besoin deux fois): = d
r3 (ton "y"): = 1
Label 1
[conditon] Si r1a > r3 :
.....r1a: +r3
.....r1a: /2
.....r2b: /r1b
.....r3: =r2b
.....r1b: = r1a
.....r2b: = r2a
.....Saut vers label 1
[fin de conditon]
|
Quel RPG Maker choisir ? • Ocarina of Time PC • Polaris 03 |
| Chanter l'hyperchleuasme | Ton code ressemble à celui de Tassle, mais il est différent.
Citation: Je pose x = v et y = 1.
Tant que x > y:
... x = (x+y)/2
... y = v/x
(Fin Tant que) |
Ça se traduit par :
1
2
3
4
5
6
7
8
9
10
| r1a := d
r3 := 1
label "toto"
condition si r1a > r3 :
r1a += r3
r1a /= 2
r3 := d
r3 /= r1a
saut vers label "toto"
fin de condition |
L'idée c'est que ton nombre d, tu vas en chercher une racine carrée r telle que r*r=d, donc tu pars de d=x*y avec x=d et y=1 (c'est-à-dire d=d*1) et puis tu vas faire en sorte que x et y se rapprochent petit à petit l'un de l'autre (en rendant x égal à la moyenne entre x et y), mais que leur produit fasse toujours d (en rendant y égal à d/x). Et quand les deux seront égaux, bah tu auras ta racine.
exemple :
x = 72
y = 1
x = (72+1)/2 = 36
y = 72/36 = 2
x = (36+2)/2 = 19
y = 72/19 = 3
x = (19+3)/2 = 11
y = 72/11 = 6
x = (11+6)/2 = 8
y = 72/8 = 9
x = (8+9)/2 = 8
y = 72/8 = 9
Ici ça va boucler à l'infini parce que 8 et 9 ne peuvent pas devenir plus proches que ça avec une division d'entiers. Pas la peine de continuer lorsque x n'évolue plus.
|
Es-tu une star ? | Kujira no Hara | Muma|Rope | Polaris 03 | La 7e porte |
Tassle -
posté le 25/11/2021 à 22:49:13 (5274 messages postés)
| Disciple de Pythagolf | Nope c'est pas normal ! x devrait toujours être pile l'entier le plus proche en dessous de la vraie racine (ou exactement la vraie racine si elle est entière). Et y à la fin devrait être soit égal à x, à x+1 où à x+2 il me semble (jamais x+3 ou plus).
Mais t'as pas besoin de deux copies de r1 et r2 (et la valeur de r2, càd v, ne devrait jamais changer).
En gros dans la boucle t'aurais juste :
r1: +r3
r1: /2
r3: =r2
r3: /r1
Édit : ah j'ai pas rafraîchi, grilled
Par contre ma version marche bien avec la division euclidienne, à la fin t'as x<y donc tu boucles pas à l'infini.
|
~~ |
| Chanter l'hyperchleuasme | Ah oui en effet ! La condition fait très bien son travail puisque x devient plus petit que y.
|
Es-tu une star ? | Kujira no Hara | Muma|Rope | Polaris 03 | La 7e porte | Aller à la page 1 2 3 4 5 6Index du forum > Généralités > [RM2003] Création d'un simili-Mode 7
|