Dots Tunnel

Programmation avancée de jeux en PureBasic
garzul
Messages : 683
Inscription : mer. 26/mai/2004 0:33

Dots Tunnel

Message par garzul »

Bonjour !

Je voudrai savoir comment faire en PureBasic un effet comme celui - la :

Image

J'ai essayé d'en faire un mais je n'y arrive pas ! Pourtant le principe est assez simple et claire il faut dessiner un cercle puis fait grossir son rayon et appliquer pour chaque cercle un mouvement sinusoidale mais je n'y arrive pas :(
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Message par djes »

Tu oublies l'effet de perspective, c'est surtout ça le principe!
En gros c'est x=(x*d)/(d+ppd+z), et y=(y*d)/(d+ppd+z)
avec d:distance de l'oeil et ppd: effet de persp.
Tu peux aussi faire plus simple avec x=x/z et y=y/z
garzul
Messages : 683
Inscription : mer. 26/mai/2004 0:33

Message par garzul »

Merci beaucoup ! :)
garzul
Messages : 683
Inscription : mer. 26/mai/2004 0:33

Message par garzul »

Bon j'ai enfin tester et voila le résultat de mes tests ^^ :

Un effet assez sympa que j'ai voulu garder (les couleurs sont barbares ;)) :

Code : Tout sélectionner

; --------------------------------------------------
; - Auteur            : Garzul                     -
; - Date              : 5 Décembre 2005            -
; - Type de programme : Effets                     -
; - Version de PB     : PureBasic v3.92            -
; --------------------------------------------------



; Initialisation :
InitSprite() : InitKeyboard()

OpenScreen(1024,768,32,"")

angle.f = 0.0
D       = 100
PPD     = 100
X       = 512+(X*D)/(D+PPD+Z)
Y       = 360+(Y*D)/(D+PPD+Z) 
Z       = (Cos(Sqr(((X * X) + (Y * Y)) / 2 )))
Rayon   = 50


; Boucle
Repeat

ExamineKeyboard()
ClearScreen(0,0,0)


; DrawTunnel ;)
StartDrawing(ScreenOutput())

DrawingMode(4)
For i=0 To 200 Step 2

 Circle(X+i*Cos(angle+Sin(Sqr(i))),Y+i*Sin(angle+Cos(Sqr(i))),Rayon+i,RGB(X-i,Y,X-i))

Next i

StopDrawing()

angle + 0.02



FlipBuffers()

Until KeyboardPushed(#PB_Key_Escape)

La on voit mieux le tunnel est ca ressemble beaucoup plus à un tunnel ;) :

Code : Tout sélectionner

; --------------------------------------------------
; - Auteur            : Garzul                     -
; - Date              : 5 Décembre 2005            -
; - Type de programme : Effets                     -
; - Version de PB     : PureBasic v3.92            -
; --------------------------------------------------



; Initialisation :
InitSprite() : InitKeyboard()

OpenScreen(1024,768,32,"")

angle.f = 0.0
D       = 100
PPD     = 100
X       = 512+(X*D)/(D+PPD+Z)
Y       = 360+(Y*D)/(D+PPD+Z) 
Z       = (Cos(Sqr(((X * X) + (Y * Y)) / 2 )))
Rayon   = 50


; Boucle
Repeat

ExamineKeyboard()
ClearScreen(0,0,0)


; DrawTunnel ;)
StartDrawing(ScreenOutput())

DrawingMode(4)
For i=0 To 200 Step 2

 Circle(X+i*Cos(angle+Sin(Sqr(i))),Y+i*sin(angle),Rayon+i,RGB(X-i,Y,X-i))

;*Sin(angle+Cos(Sqr(i))) <== mémo ;)

Next i

StopDrawing()

angle + 0.02



FlipBuffers()

Until KeyboardPushed(#PB_Key_Escape)

Un autre effet sympathique ou disparaisse et réaparaissent des cercles :) :

Code : Tout sélectionner

; --------------------------------------------------
; - Auteur            : Garzul                     -
; - Date              : 5 Décembre 2005            -
; - Type de programme : Effets                     -
; - Version de PB     : PureBasic v3.92            -
; --------------------------------------------------



; Initialisation :
InitSprite() : InitKeyboard()

OpenScreen(1024,768,32,"")

angle.f = 0.0
D       = 100
PPD     = 100
X       = 512+(X*D)/(D+PPD+Z)
Y       = 360+(Y*D)/(D+PPD+Z) 
Z       = (Cos(Sqr(((X * X) + (Y * Y)) / 2 )))
Rayon   = 50


; Boucle
Repeat

ExamineKeyboard()
ClearScreen(0,0,0)


; DrawTunnel ;)
StartDrawing(ScreenOutput())

DrawingMode(4)
For i=0 To 200 Step 2

 Circle(X+i*Cos(angle+Sin(Sqr(i))),Y+i*Sin(angle+Cos(Sqr(i))),Rayon+i*Sin(angle+Cos(Sqr(i))),RGB(X-i,Y,X-i))

;*Sin(angle+Cos(Sqr(i))) <== mémo ;)

Next i

StopDrawing()

angle + 0.02



FlipBuffers()

Until KeyboardPushed(#PB_Key_Escape)

Une simple spirale :

Code : Tout sélectionner

; --------------------------------------------------
; - Auteur            : Garzul                     -
; - Date              : 5 Décembre 2005            -
; - Type de programme : Effets                     -
; - Version de PB     : PureBasic v3.92            -
; --------------------------------------------------



; Initialisation :
InitSprite() : InitKeyboard()

OpenScreen(1024,768,32,"")

angle.f = 0.0
D       = 100
PPD     = 100
X       = 512+(X*D)/(D+PPD+Z)
Y       = 360+(Y*D)/(D+PPD+Z) 
Z       = (Cos(Sqr(((X * X) + (Y * Y)) / 2 )))
Rayon   = 50


; Boucle
Repeat

ExamineKeyboard()
ClearScreen(0,0,0)


; DrawTunnel ;)
StartDrawing(ScreenOutput())

DrawingMode(4)
For i=0 To 200 Step 2

 Circle(X+i*Cos(Sqr(i)+angle),Y+i*Sin(Sqr(i)+angle),Rayon+i,RGB(X-i,Y,X-i))

;*Sin(angle+Cos(Sqr(i))) <== mémo ;)

Next i

StopDrawing()

angle + 0.02



FlipBuffers()

Until KeyboardPushed(#PB_Key_Escape)

Le fameux tunnel :) :

Code : Tout sélectionner

; --------------------------------------------------
; - Auteur            : Garzul                     -
; - Date              : 5 Décembre 2005            -
; - Type de programme : Effets                     -
; - Version de PB     : PureBasic v3.92            -
; --------------------------------------------------



; Initialisation :
InitSprite() : InitKeyboard()

OpenScreen(1024,768,32,"")

angle.f = 0.0
D       = 100
PPD     = 100
X       = 512+(X*D)/(D+PPD+Z)
Y       = 360+(Y*D)/(D+PPD+Z) 
Z       = (Cos(Sqr(((X * X) + (Y * Y)) / 2 )))
Rayon   = 50


; Boucle
Repeat

ExamineKeyboard()
ClearScreen(0,0,0)


; DrawTunnel ;)
StartDrawing(ScreenOutput())

DrawingMode(4)
For i=0 To 200 Step 2

 Circle(X+i*Cos(angle+Sin(Sqr(i/6))),Y+i*Sin(angle+Cos(Sqr(i/6))),Rayon+i,RGB(X-i,Y,X-i))

;*Sin(angle+Cos(Sqr(i))) <== mémo ;)

Next i

StopDrawing()

angle + 0.02



FlipBuffers()

Until KeyboardPushed(#PB_Key_Escape)

Voila j'éspere que ca vous seras utilsl ;)
Avatar de l’utilisateur
flaith
Messages : 1487
Inscription : jeu. 07/avr./2005 1:06
Localisation : Rennes
Contact :

Message par flaith »

Salut et merci !

par contre je dois changer la ligne

Code : Tout sélectionner

DrawingMode(4)
par

Code : Tout sélectionner

DrawingMode(2 | 4)
pour voir les cercles, c'est normal docteur :?:
garzul
Messages : 683
Inscription : mer. 26/mai/2004 0:33

Message par garzul »

Heu chez moi ca marche impecc ;), essai de mettre des couleurs fixe (car ma gestion pour appliquer des couleurs en dégrader est assez barbare ^^ )
Avatar de l’utilisateur
flaith
Messages : 1487
Inscription : jeu. 07/avr./2005 1:06
Localisation : Rennes
Contact :

Message par flaith »

une petite modif de ce type

Code : Tout sélectionner

RGB(200-i,50,200-i)
et ca marche beaucoup mieux, merci :D
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

pas mal :D mais change le titre de ton topic Garzul
car ce n'est pas "Dots tunnel" mais juste "tunnel"
en effet "Dots tunnel" veut dire tunnel de points !!
or la ce serai plutot circle tunnel :D

ou attention vous etes devant le tuyau de l'aspirateur :lol:
garzul
Messages : 683
Inscription : mer. 26/mai/2004 0:33

Message par garzul »

;) effectivement ! Mais il est tout à faît possible monsieur Dobro de changez le "circle" par "plot" ou par "box" de taille 1,1 ;) donc le titre est toujour valable \o/

PS : Ta guitare l'est belle mais heu tu joue quoi avec ? :)
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

Ta guitare l'est belle mais heu tu joue quoi avec ?
rien , je sais pas jouer :?
je m'en sert pour faire cuire les marrons ! :?
Anonyme

Message par Anonyme »

Voici mon propre "Circles" tunnel :D
Jouer avec les constantes pour differents resultat.


; --------------------------------------------------
; - Auteur : Cpl.Bator -
; - Date : 5 Décembre 2005 -
; - Type de programme : Effets tunnel -
; - Version de PB : PureBasic v3.94 -
; --------------------------------------------------
InitSprite () : InitKeyboard () : InitMouse ()
OpenScreen (1024,768,32, "" )



;-Constantes pour les Naneaux ^^
#Max_Anneaux = 300
#Rayon_limite = 1000
#Vitesse_Generation = 40 ; Tps de création entre chaque anneaux
#Vitesse_Acceleration = 0.15





Declare GestionAnneau(X.f,Y.f)

Global Fx.f
Global Fy.f
Global A.f
Structure Anneaux
X.f
Y.f
Rayon.f
Angle.f
Vitesse.f
Flag.b
EndStructure

Dim Anneau.Anneaux( #Max_Anneaux )





Repeat
ExamineKeyboard ()
ClearScreen (0,0,0)
;***********************
A+0.025
 Fx=512 + 384 * Cos (A)
  FY=384 + 128 * Sin (A)
   GestionAnneau(Fx,Fy)
;***********************
FlipBuffers ()
Until KeyboardPushed ( #PB_Key_Escape )






Procedure GestionAnneau(X.f,Y.f)
Shared Zcolor.l
Shared TempsEntreAnneaux.l

For e = 0 To #Max_Anneaux


; Si l'anneau n'existe pas et si on à âs dépasser le temps de creation entres les anneaux
If Anneau(e)\Flag=0 And TempsEntreAnneaux< ElapsedMilliseconds ()
Anneau(e)\Flag=1
TempsEntreAnneaux = ElapsedMilliseconds () + #Vitesse_Generation
Anneau(e)\X = X
Anneau(e)\Y = Y
Anneau(e)\Rayon = 0
Anneau(e)\Angle = 0
Anneau(e)\Vitesse = 0
EndIf


If Anneau(e)\Flag=1

Zcolor = (((Anneau(e)\Rayon*100)/240)*2)+30
If Zcolor>255 : Zcolor=255 : EndIf
If Zcolor<0 : Zcolor=0 : EndIf

Anneau(e)\Rayon + Anneau(e)\Vitesse
Anneau(e)\Vitesse + #Vitesse_Acceleration

StartDrawing ( ScreenOutput ())
DrawingMode (4)
Circle (Anneau(e)\X ,Anneau(e)\Y,Anneau(e)\Rayon, RGB (0,Zcolor,0))
StopDrawing ()
EndIf

If Anneau(e)\Rayon>#Rayon_limite
Anneau(e)\Flag=0
EndIf
Next e

EndProcedure


Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

ça c'est un tunnel ! :D

yeeeeehaaaa ! :lol:



j'aime beaucoup avec un

" Circle (Anneau(e)\x ,Anneau(e)\y,Anneau(e)\Rayon, RGB (0,Zcolor,(255-Zcolor)))"



ou avec un " DrawingMode (4|2)"
Anonyme

Message par Anonyme »

Voilà une p'tite màj.
On peut régler l'épaisseur du cercle. plus le cercle est épais + cela rame.



; --------------------------------------------------
; - Auteur : Cpl.Bator -
; - Date : 6 Décembre 2005 -
; - Type de programme : Effets tunnel -
; - Version de PB : PureBasic v3.94 -
; --------------------------------------------------
InitSprite () : InitKeyboard () : InitMouse ()
OpenScreen (1024,768,32, "" )



;-Constantes pour les Naneaux ^^
#Max_Anneaux = 250
#Rayon_limite = 1024
#Vitesse_Generation = 150 ; Tps de création entre chaque anneaux
#Vitesse_Acceleration = 0.03
#Epaisseur = 3
#Ondulation = 0.008



Declare GestionAnneau(X.f,Y.f)

Global Fx.f
Global Fy.f
Global A.f

Structure Anneaux
X.f
Y.f
Rayon.f
Angle.f
Vitesse.f
Flag.b
EndStructure


Dim Anneau.Anneaux( #Max_Anneaux )




Repeat
ExamineKeyboard ()
ClearScreen (0,0,10)
;***********************
A+ #Ondulation
 Fx=512 + 384 * Cos (A)
  FY=384 + 256 * Sin (A)
   GestionAnneau(Fx,Fy)
;***********************
FlipBuffers ()
Until KeyboardPushed ( #PB_Key_Escape )






Procedure GestionAnneau(X.f,Y.f)
Shared Zcolor.l
Shared TempsEntreAnneaux.l

For e = 0 To #Max_Anneaux


; Si l'anneau n'existe pas et si on à âs dépasser le temps de creation entres les anneaux
If Anneau(e)\Flag=0 And TempsEntreAnneaux< ElapsedMilliseconds ()
Anneau(e)\Flag=1
TempsEntreAnneaux = ElapsedMilliseconds () + #Vitesse_Generation
Anneau(e)\X = X
Anneau(e)\Y = Y
Anneau(e)\Rayon = 20
Anneau(e)\Angle = 0
Anneau(e)\Vitesse = 0
EndIf


If Anneau(e)\Flag=1

Zcolor = (((Anneau(e)\Rayon*100)/240)*2)+30
If Zcolor>255 : Zcolor=255 : EndIf
If Zcolor<0 : Zcolor=0 : EndIf

Anneau(e)\Rayon + Anneau(e)\Vitesse
Anneau(e)\Vitesse + #Vitesse_Acceleration

StartDrawing ( ScreenOutput ())
DrawingMode (4|1)

For EP = 1 To #Epaisseur
  Circle (Anneau(e)\x ,Anneau(e)\y,Anneau(e)\Rayon+EP, RGB (0,0,Zcolor))
   Next EP

StopDrawing ()
EndIf

If Anneau(e)\Rayon>#Rayon_limite
Anneau(e)\Flag=0
EndIf
Next e

EndProcedure


Dernière modification par Anonyme le mar. 06/déc./2005 22:31, modifié 1 fois.
garzul
Messages : 683
Inscription : mer. 26/mai/2004 0:33

Message par garzul »

Jolie tout ca ;)
Frenchy Pilou
Messages : 2194
Inscription : jeu. 27/janv./2005 19:07

Message par Frenchy Pilou »

Juste à rajouter le mouvement souris pour le point d'application du petit cercle et hop un petit truc hyper dynamique 8)
Histoire de dire que l'utilisateur participe à la création de son hypnose annoncée :lol:
Est beau ce qui plaît sans concept :)
Speedy Galerie
Répondre