Jump to content
Rpg²S Forum

Search the Community

Showing results for tags 'trigonometria'.

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • Rpg²S
    • Ingresso
    • Bacheca
  • Making
    • Tutorial
    • Grafica
    • Risorse sonore
    • Parlando del Making...
    • Oltre RpgMaker...
  • RpgMaker MZ
    • Supporto MZ
    • Risorse grafiche MZ
    • PLUGIN e Javascript per MZ
    • Progetti MZ
    • Release MZ
  • RpgMaker MV
    • Supporto MV
    • Risorse grafiche MV
    • PLUGIN e Javascript per MV
    • Progetti MV
    • Release MV
  • RpgMaker VX & VX-Ace
    • Supporto VX e VX-Ace
    • Risorse grafiche VX & VX-Ace
    • RGSS2 (VX)
    • RGSS3 (VX-Ace)
    • Progetti VX e VX-Ace
    • Release VX e VX-Ace
  • RpgMaker XP
    • Supporto XP
    • Risorse grafiche XP
    • RGSS (XP)
    • Progetti XP
    • Release XP
  • RpgMaker 2000/2003
    • Supporto 2K/2K3
    • Risorse grafiche 2K/2K3
    • Progetti 2K/2K3
    • Release 2K/2K3
  • Cortile
    • Off Topic
  • Team e Gilde
    • R²S Resources Team
    • Computer Dreams
    • Rpg2s RPG BY FORUM
  • Archivio
    • R²S Magazine
    • RenShop

Calendars

  • Community Calendar

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


AIM


MSN


Website URL


ICQ


Yahoo


Jabber


Skype


Twitter


Facebook


YouTube


LinkedIn


DeviantArt


Google Plus


Instagram


Provenienza


Interessi


Titoli


Skin Profilo


Skin Profilo Scelta


Conigli


Banana E3


XmaS14


Uova


Coniglio d'oro


ZucCasa

Found 1 result

  1. Usare seno, coseno e resto Versione 1.0 1. Introduzione Per: RPG Maker XP/VX/VX Ace, RPG Maker 2000/2003 con patch. Autore: mikb89. Descrizione: Per chi programma minigiochi o crea da sé menu e HUD, queste funzioni tornano molto utili ma sono poco conosciute. Tramite seno e coseno si possono ottenere movimenti particolari come oscillazioni o rotazioni. Menu ad anello, HUD circolari, foglie che cadono si creano tramite questi. Il resto è utilizzatissimo per limitare un valore entro un certo campo, tipo nelle voci di un menu o per conoscere singole cifre di un numero (es. solo le decine), nel caso si vogliano mostrare valori in menu/bs ad eventi in cui i numeri sono dentro picture. Con questo tutorial imparerete a fare tutte queste cose. Ultima modifica: 29/02/2012. 2. Tutorial sin cos % .Introduzione Senza una conoscenza approfondita di matematica e trigonometria, per uno scripter autodidatta è difficile pensare di andare ad usare queste tre funzioni che, invece, risultano utilissime una volta apprese. Questo tutorial fornirà una base da cui partire. .Setup L'idea che dovremo avere è di una variabile che si va incrementando di una quantità unitaria. Io userò 0.1. Creare la variabile è semplice: @var = 0 E poi, per incrementarla ad ogni update: @var += 0.1 Questa qui NON è LA tecnica, è solo quella che userò qui per spiegare queste funzioni. .Seno Il seno, in trigonometria, è una funzione che, dato un numero, ne fa risultare un altro compreso tra -1 e 1. La sintassi matematica del seno è sin(x), dove x è il numero. Come vedete, ci sono le parentesi come se fosse una funzione di programmazione. In RGSS(1,2,3,x), però, la sintassi è diversa: risultato = Math::sin(@var) in quanto la funzione fa parte del modulo Math. Questo codice andrà messo nell'update, sotto l'incremento di @var scritto poc'anzi.http://img407.imageshack.us/img407/2420/sinw.png Nella figura la x sotto è la nostra @var che aumenta e il grafico mostra il valore restituito da sin a seconda del cambiamento di questa. Immaginatevi di essere piatti e di vedere questa figura perpendicolarmente dal punto di inizio di x verso la direzione in cui va la freccia. Immaginate che non ci siano le linee già disegnate ma che sia un punto a seguirne il movimento. Il risultato di sin, che è quello che vedreste, è un movimento oscillante! Questa cosa ovviamente non è utile solo se vogliamo fare un pendolo, vedremo infatti un esempio molto diffuso subito dopo la breve spiegazione del coseno. .Coseno Il coseno funziona allo stesso modo del seno, solo, a valori 'spostati'. Cioè, se il seno di 0 è 0, il coseno di 0 è 1. I valori risultanti però spaziano nello stesso campo, fra -1 e 1. Il risultato visivo è quindi lo stesso.http://img854.imageshack.us/img854/8997/cosr.png Nello stesso punto il valore sarà diverso da quello dato dal seno, ma l'andamento del punto osservato sarà sempre oscillante. Allora, a che serve conoscerli entrambi? .Movimento circolare L'esempio che avevo anticipato prima è il cerchio, o almeno il movimento necessario per crearlo. Vi faccio un esempio pratico dettoci da un professore di fisica. Ficcatevi un disco nel dito. Poggiateci un oggetto sopra e alzate il dito in modo che il disco stia all'altezza dell'occhio. Dovrete vedere il disco come una linea o quasi. Fatelo girare e seguite l'oggetto con l'occhio. Il movimento dell'oggetto è quello della funzione seno! (O coseno, vabé) Guardando però il disco dall'alto, il movimento dell'oggetto è in realtà circolare. Per ottenere questo, semplicemente assegniamo le coordinate ottenute dal risultato dato dallo stesso valore una volta con seno e una volta con coseno. Codice: @sprite.y = Math::sin(@var) @sprite.x = Math::cos(@var) Ovviamente @sprite dovrà essere prima creata e disegnata, poi aggiornata e, alla fine, cancellata. @sprite = Sprite.new @sprite.bitmap = Bitmap.new(30,30) @sprite.bitmap.fill_rect(0,0,30,30,Color.new(255,255,255)) va messo all'inizio, @sprite.update dentro l'update, mentre: @sprite.bitmap.dispose @sprite.dispose alla fine. Questo è il codice di un quadrato che gira. Voi però non lo vedrete. Come abbiamo detto, i valori risultanti vanno da -1 a 1 e, in questo esempio sono anche non inclusi. Per non inclusi intendo dire che il risultato ci si avvicina al limite, ma non lo raggiunge. Immaginateli come -0.999999999999 e 0.999999999999, solo, con un numero di 9 infinito. In programmazione il numero di 9 non è infinito ma dipende dal tipo di variabile che si usa, ma questi son altri discorsi. Quindi, come intero, visto che i pixel sono proprio interi, il risultato sarà sempre 0. O 1 a seconda dell'arrotondamento. È quindi necessario moltiplicare il risultato in base allo spazio fra cui vogliamo far muovere l'oggetto. Mettiamo che vogliamo farlo muovere di 100 pixel, dobbiamo moltiplicare per 50. Otterremo un movimento fra -50 e 50. In questo modo girerà però attorno al bordo superiore sinistro della finestra. Possiamo spostarlo sommando dei valori al risulato della funzione. Per metterlo ad esempio al centro dello schermo, per esempio lo schermo del VX: @sprite.y = 416/2 + Math::sin(@var)*50 @sprite.x = 544/2 + Math::cos(@var)*50 Non sarà perfettamente centrato perché le coordinate si riferiscono all'angolo superiore sinistro dell'oggetto e non al suo centro, si può rimediare con: @sprite.ox = @sprite.oy = 30/2 per fare in modo che il punto di riferimento non sia 0 (ovvero l'angolo) ma il centro. La metà di 30 in quanto 30 è la grandezza che abbiamo definito prima. Volendo fare gli sboroni, possiamo anche cambiare l'angolazione del quadrato mentre gira. @sprite.angle = -@var*360/(2*Math::PI) Non si può passare direttamente @var perché l'angolo va da 0 a 360 mentre i valori che prendono le funzioni sinusoidali hanno 2 volte pi greco come gamma di valori. Che corrisponde a Math::PI, mi pare chiaro. Il meno va messo perché il giro è al contrario. I valori matematici litigano con quelli informatici perché nella prima le y vanno dal basso verso l'alto mentre nella seconda è al contrario. Vabè. .Resto Il resto è più semplice e lo trovate spesso usato negli script. Quello che rappresenta il resto lo sanno tutti. Divido 10 per 4. Mi viene 2,5. Se lo faccio col metodo di divisione imparato alle elementari, ottengo 2 come risultato intero e un resto di 2. La particolarità del resto è che non può superare il divisore. Il 4, in questo caso. Faccio esempi numerici. 8/4 = 2, resto 0 9/4 = 2, resto 1 10/4 = 2, resto 2 11/4 = 2, resto 3 12/4 = 3, resto 0 Sarà così all'infinito. 0, 1, 2 e 3. Se vogliamo limitare un valore a un numero basta quindi valutare il resto. In rpg maker viene ad esempio usato nelle pagine di equip, status, skill quando premendo PagUp si passa all'eroe successivo. def next_actor @actor_index += 1 @actor_index %= $game_party.members.size $scene = Scene_Skill.new(@actor_index) end Per ottenere il resto si usa %. O %= per settare. Con questo codice l'@actor_index non potrà indicare un eroe che non è nel gruppo in quanto è limitato dalla dimensione di questo (in inglese members = membri [del gruppo], size = dimensione). Si poteva di certo mettere una condizione. Se @actor_index è maggiore di x allora impostalo a zero. Oltre a non essere elegante, questa cosa funziona solo con incremento unitario. Mettiamo che il party comprenda 3 elementi. @actor_index è 2 (visto che parte da zero, indica il terzo elemento). Se @actor_index venisse incrementato di 2, non dovrebbe essere impostato a 0, come fa la condizione, ma dovrebbe andare a 1. Con il resto il valore viene impostato correttamente. Il resto si può usare anche dagli eventi, nel settaggio variabile. Utilissimo ad esempio per indicare valori numerici via picture. Come fate a mostrare 973 utilizzando 10 picture che contengono i signoli numeri da 0 a 9? 973%10 = 3 E avete il primo numero. Lo sottraete, dividete per 10 e avrete 97. 97%10 = 7 E così per tutti i numeri. Poi tramite condizione potete mostrare la picture a seconda del numero. Probabilmente troverete spiegazioni più approfondite su questa parte in un tutorial per bs ad eventi che, direi, non è questo qui. .Conclusione Non avevo intenzione di creare un testo così lungo e, vedendolo mentre lo scrivevo, ho pensato di togliere la parte sul resto. Però visto che non è troppo lunga e aggiungendola non cambia di molto il risultato finale l'ho lasciata. Spero questo tutorial vi sia utile, che si faccia capire e che sia di vostro gradimento. .Allegati Ho incluso uno script dimostrativo che funziona su XP, VX e Ace. All'interno c'è scritto come farlo partire.
×
×
  • Create New...