tiens voici un exemple qui reprend les 2 modes !!!
si tu click a 4,ou 5,6,7 bref ! endroit different et qu'en plus tu fait des courbes
le sprite ira d'un point clicker a un autre , et lorsqu'il rencontrera une courbe dessiné il la suivra !!
bref les 2 mode dans le meme chemin !!!
voici le code :
CE CODE A ETE REEDITER APRES CORRECTION LE 21/11/2004
Code : Tout sélectionner
; code : Dobro
; Rapport de bug : Le Soldat inconnu (Merci ! )
; Exemple de creation d'un chemin pour jeux video 2D
; du Type Space invader
; Mode DESSIN CONTINU
; dessinez avec le bouton gauche de la souris
; tenir cliqué pendant tout le temps du dessin
; Mode dessin "PATH FINDING"
; maintenir cliqué puis faire une petite trace pour arrondir les angles ou un seul click !!
; relacher puis a nouveau ailleurs dans l'ecran recommencer
; fin du dessin avec le bouton droit de la souris
; automatiquement le sprite repasse sur le chemin dessiné !!
#Police=1
; ***********************************
Resultat = InitSprite()
FontID = LoadFont(#Police, "arial", 18, #PB_Font_Bold )
EcranX = GetSystemMetrics_(#SM_CXSCREEN):;=largeur de l'ecran
EcranY = GetSystemMetrics_(#SM_CYSCREEN):;=hauteur de l'ecran
WindowID = OpenWindow(1, 0, 0, EcranX, EcranY , #PB_Window_SystemMenu|#PB_Window_BorderLess |#PB_Window_ScreenCentered , "hello")
WindowID = WindowID(1)
Result = OpenWindowedScreen(WindowID,0,0, 640,480, 1, 0,0)
Resultat = InitMouse()
NewList liste1() :;cree une liste
Resultat = CreateSprite(2, 10, 10, 0) :;on cree un sprite
StartDrawing( SpriteOutput(2) ) : ; on va dessiner une boite verte dans le sprite
Box(0, 0, 10, 10 ,RGB(0,255,0) )
StopDrawing() :; voila c'est fait notre sprite est pret !!
Repeat
Resultat = ExamineMouse()
Event=WaitWindowEvent() :;multitache !!
DisplaySprite(2, MouseX(), MouseY())
;ClearScreen(0, 0, 0) :;efface l'ecran
;******************* GENERATEUR DE CHEMIN **********************
;**********************************************************************
;************************** PHASE 1 ***********************************
; dessin et enregistrement des coordonnes dans un fichier ***********
;************* "chemin.ini *******************************************
;**********************************************************************
;**********************************************************************
If MouseButton(1): ;enregistre les coordonees dessiné
AddElement(liste1()) :; ajoute coordonee x a la liste
liste1()= MouseX()
AddElement(liste1()) :; ajoute coordonnee y a la liste
liste1()= MouseY()
StartDrawing( SpriteOutput(2) )
Box(0, 0, 10, 10 ,RGB(255,0,0) )
StopDrawing()
FlipBuffers():; affiche l'ecran
EndIf
If MouseButton(2):; stop l'enregistrement
; ********* Cree le fichier qui contien les coordonnees
Resultat = CreateFile(1,"chemin.ini")
ResetList(liste1()) :; on se place avant le premier element de la liste
While NextElement(liste1()):; boucle tant que la liste n'est pas fini
WriteWord(liste1())
Wend
CloseFile(1)
dess=1
EndIf
;**********************************************************************
;*********************CECI peut etre dans le programe de jeux **********
;************************** PHASE 2 ***********************************
; ****************** Lecture des coordonnes dans un fichier ***********
;************* "chemin.ini *******************************************
;**********************************************************************
;**********************************************************************
If dess=1
NewList chemin() :;cree une liste
Resultat = OpenFile(1, "chemin.ini")
While Eof(1)=0 :; tant que fin de fichier pas atteinte
coordx = ReadWord() :;lit la coordonee x
coordy = ReadWord() :;lit la coordonee y
AddElement(chemin()) :; ajoute coordonee x a la liste
chemin()= coordx
AddElement(chemin()) :; ajoute coordonnee y a la liste
chemin()= coordy
Wend
Resultat = CreateSprite(1, 10, 10, 0) :;on cree un sprite
StartDrawing( SpriteOutput(1) ) : ; on va dessiner une boite verte dans le sprite
Box(0, 0, 10, 10 ,RGB(0,255,0) )
StopDrawing() :; voila c'est fait notre sprite est pret !!
nbr=CountList(chemin())
ResetList(chemin()) :; on se place avant le premier element de la liste
For i=0 To nbr Step 2 ;boucle tant que la liste n'est pas fini
SelectElement(chemin(),i)
; ASTUCE : le step 2 fait que les coordonnes d'arrivé deviennent les coordonées de depart !
; ********* Cree le fichier qui contien les coordonnees
x=chemin() :; lit d'abord la coordonee x
SelectElement(chemin(),i+1):; passe a la donnee suivante dans la liste
y=chemin():; lit la coordonnee y
SelectElement(chemin(),i+2):; passe a la donnee suivante dans la liste
x2=chemin() :; lit d'abord la coordonee x
SelectElement(chemin(),i+3):; passe a la donnee suivante dans la liste
y2=chemin():; lit la coordonnee y
; Boucle pour le path finding (faire une petite trace a chaque click !! pas seulement un point !)
cour=1 ; force a regarder si les coordonne d'arriver sont different des coordonées de depart !
While cour=1 : ; on regarde !
If x<x2:x=x+1:cour=1: DisplaySprite(1, x, y):FlipBuffers(): ClearScreen(0, 0, 0) :EndIf
If x>x2:x=x-1:cour=1: DisplaySprite(1, x, y):FlipBuffers(): ClearScreen(0, 0, 0) :EndIf
If y<y2:y=y+1:cour=1: DisplaySprite(1, x, y):FlipBuffers(): ClearScreen(0, 0, 0) :EndIf
If y>y2:y=y-1:cour=1: DisplaySprite(1, x, y):FlipBuffers(): ClearScreen(0, 0, 0) :EndIf
If x=x2 And y=y2 ; le sprite est arrivé a destination !
cour=0 ; sort de la boucle de dessin du sprite sur les points de passage !
EndIf
Wend
Next i
End
EndIf
If MouseButton(1)=0
StartDrawing( SpriteOutput(2) )
Box(0, 0, 10, 10 ,RGB(0,255,0) )
StopDrawing()
FlipBuffers():; affiche l'ecran
ClearScreen(0, 0, 0) :;efface l'ecran
EndIf
;
Until Event=#PB_Event_CloseWindow