Page 1 sur 1

editeur de niveau -> divers problèmes

Publié : mar. 10/juil./2007 16:05
par beauregard
Bonjour, heu, depuis hier, j'essaye de convertir mon petit editeur de niveau, et ce n'est pas facile (une vrai petite usine à gaz).

Je met ici un petit code, car je me suis rendu compte que je n'arrivai pas à changer la valeur d'une variable globale à l'intérieure d'une procédure, ce qui, vous en conviendrez, est pour le moins embêtant. Mais grâce à l'intervention de Cpl.Bator, j'ai fait la correction necéssaire:

Code : Tout sélectionner

UsePNGImageDecoder () ; 

If InitMouse ()=0 Or InitSprite ()=0 Or InitKeyboard ()=0 Or InitSprite3D ()=0 ; oui, il faut tout lui dire...
     MessageRequester ( "Error" , "Can't open DirectX 7 or later" , 0)
     End
EndIf


Global zut.l

;Déclare la procédure( j'avais omis de le faire):
Declare choixniv()

If OpenScreen (1024, 768, 32, "variable globale et procedure" )=0 

     MessageRequester ( "Error" , "Can't open a 1024*768 - 32 bit screen !" , 0)
     End
EndIf


; **************************************************************************************************
Repeat ; boucle principale
     
  FlipBuffers (): ClearScreen ( RGB (0,0,0))


  choixniv()

  zut$= Str(zut)
  If StartDrawing(ScreenOutput())
    DrawingMode(1)
      FrontColor ( RGB (255,255,255))
      DrawText (1,100, "zut: " +zut$)
    StopDrawing()
  EndIf   
    
    
  Gosub fps ; nombre d'image par seconde. 
    
  ExamineKeyboard ()
Until KeyboardPushed ( #PB_Key_Escape ): End ; fin de la boucle principale (appuyez sur la touche Esc)
; **************************************************************************************************

   
Procedure.l choixniv()

 zut=1 


EndProcedure


fps:
If Val ( FormatDate ( "%ss" , Date ()))=sek ; regardez pas là, c'est trop compliqué. Arrêtez j'vous dis! Bon ben, je
     ; vous aurez prévenu...
    fps+1
Else
    FPS$= Str (fps)
    fps=0
EndIf
sek= Val ( FormatDate ( "%ss" , Date ()))
 
StartDrawing ( ScreenOutput ())
DrawingMode (1)
FrontColor ( RGB (255,255,255))
DrawText (1,1, "FPS: " +FPS$)
StopDrawing ()
Return 
 
ce site est une mine d'or, mais certain code nécessite un fichier image, impossible pour moi à télécharger... comment faire ?

http://www.purearea.net/pb/CodeArchiv/French.html

Publié : mar. 10/juil./2007 16:17
par Anonyme
Tout simplement car tu n'appelle pas la procédure dans ta boucle principale, tu ne fait que la déclarer.


bout de code :

Code : Tout sélectionner

  Declare choixniv()
; **************************************************************************************************
Repeat ; boucle principale
     
  FlipBuffers (): ClearScreen ( RGB (0,0,0))

; zut=1 ; là ça marche, mais pas dans la procédure

 choixniv()
++

Re: editeur de niveau -> divers problèmes

Publié : mar. 10/juil./2007 17:39
par comtois
beauregard a écrit :ce site est une mine d'or, mais certain code nécessite un fichier image, impossible pour moi à télécharger... comment faire ?

http://www.purearea.net/pb/CodeArchiv/French.html
Essaye avec CAV CodeArchiv

Le logiciel reprend les codes que tu trouves sur le site, sauf que tu as tout sur ton disque dur (Environ 19Mo), et que tu as un utilitaire pour faire du tri et retrouver plus facilement un exemple sur un sujet précis ou un auteur, etc.

Je sais qu'André a mis quelques images dans les répertoires , sans doute celles qu'il a pu récupérer ?

Re: editeur de niveau -> divers problèmes

Publié : mar. 10/juil./2007 22:31
par beauregard
Voilà qui simplifie grandement la vie ! :D

Mais j'ai une petite angoisse à propos de clipsprite, puisque je ne suis toujours pas arrivé à l'utiliser sur un sprite3D, comment faire ?

J'ai remarqué que pour le code MapEditor, les tiles ne sont pas regroupées dans une seule et même image, je vous laisse imaginer la gestion de plusieurs milliers d'images....
en vous remerciant.

Publié : mar. 10/juil./2007 22:41
par Anonyme
je crois que clipsprite ne fonctionne pas avec les sprites 3D
si c'est pour une animation, regarde ton post 2Debutant, j'ai mis un lien
sinon, il est possible en utilisant la structure interne des sprites 3D de jouer avec les coordonnées des textures afin d'émulé un clipsprite.

Cependant , rien ne t'empeche d'avoir des tiles séparer, ton programme ne ramera pas plus et ca evite les opérations de clipping :D

Publié : mer. 11/juil./2007 0:41
par beauregard
Oui, j'ai contemplé tes codes, et j'ai constaté que tu n'utilise pas les sprites3D.
Tu as beaucoup de mérite, et je te souhaite de réussir ton projet de jeu isométrique( le fabuleux view point n'a jamais eu de suite, non ?).

Je ne comprend pas l'absence de commande simple comme LoadAnimSprite, qui nous faciliterai la tâche, et je suis, comment dire, un peu désorienté. Mais j'imagine que la même remarque revient inlassablement sur les forums, et j'espère que Fred en fera bientôt une priorité.

Il est clair désormais que j'ai trop avancé dans mon jeu de p.f. pour me permettre une conversion qui s'avèrera trop difficile.
Mais l'utilisation de sprite3D a suscité mon intérêt, nouvelles idées de ptits jeux rapides, et je compte bien rester à l'affut d'une mise à jour providentielle, et je posterai ici mes modestes réalisations, juste pour le plaisir.

Publié : mer. 11/juil./2007 5:04
par comtois
et elle fait quoi concrètement ta fonction LoadAnimSprite ?
Il doit être possible de la coder toi même non ?
Tu abandonnes juste parce qu'il te manque une fonction ?

Tu peux télécharger la bibliothèque AnimSprite, je ne l'utilise pas, je préfère coder mes fonctions d'animation, mais si ça se trouve elle fait exactement ce dont tu as besoin ?

http://www.pbosl.purearea.net/index.php?site=Libs

Publié : mer. 11/juil./2007 7:52
par Anonyme
Oui, j'ai contemplé tes codes, et j'ai constaté que tu n'utilise pas les sprites3D
si tu regarde bien, si , je les utilises.

Publié : mer. 11/juil./2007 11:59
par Anonyme
Cpl.Bator a écrit : sinon, il est possible en utilisant la structure interne des sprites 3D de jouer avec les coordonnées des textures afin d'émulé un clipsprite.

Voici un snippet :
http://www.purebasic.fr/french/viewtopi ... 7254#67254

Publié : mer. 11/juil./2007 16:51
par beauregard
comtois a écrit :et elle fait quoi concrètement ta fonction LoadAnimSprite ?
Il doit être possible de la coder toi même non ?
Tu abandonnes juste parce qu'il te manque une fonction ?

Tu peux télécharger la bibliothèque AnimSprite, je ne l'utilise pas, je préfère coder mes fonctions d'animation, mais si ça se trouve elle fait exactement ce dont tu as besoin ?

http://www.pbosl.purearea.net/index.php?site=Libs

je me suis couché à 3H30 du matin, levé tôt ce matin, et là, je ne me suis pas encore accordé un peu de repos, alors je suis à la limite de l'évanouissement. Je n'ai jamais utilisé les librairies de ma vie, je suis une quiche, hein ? L'oeuvre de ma vie tourne sans plantage, même en utilisant en multitache des logiciels gourmand en mémoire, de vieux emulateurs plus instable que win2000 sans patch, et ben non, mon jeu ne tresote pas car j'utilise les commandes de base, mais alors vraiment de base hein. Mon jeu de p.f. est pourtant de grande ampleur, en 2D certes, mais parfois le "je teste" se transforme en "je joue", alors que d'après les dires des autres programmeurs, je devrait normalement en être lassé (suis je normal ?).

Mais je veux bien essayer de placer une librairie pour tester le désiré AnimSprite, alors voyons voir, pbosl_win.zip que l'on doit sûrement dezipper dans, heu?, bon ben UserLibraries alors, je me retrouve avec un dossier PBOSL4, help, CreateAnimSprite( AnimSprite , Sprite , FrameX , FrameY [, Delay] ) tu m'attendais bien au chaud toi !... ça va intéresser Cpl.Bator, à moins qu'il est déjà utilisé et rencontré un problème avec, faudra lui en toucher 2mots

LoadSprite(1,"big.bmp",0)
TransparentSpriteColor(1,255,0,255)
CreateAnimSprite(big.AnimSprite,1,75,75)


;
; plays the animation automatically
; without calling NextAnimFrame
; because the delay time is specified
; at creation time
;
LoadSprite(1,"automatic.bmp",0)
TransparentSpriteColor(1,255,0,255)
CreateAnimSprite(automatic.AnimSprite,1,75,75, 40)
; 25 FPS = 1000/25 = Delay 40 ms
; 50 FPS = 1000/50 = Delay 20 ms

; game loop
Repeat
DisplayAnimSprite(automatic,100,100)
Until ...

... ma vue se trouble, alors merci à tous et bonne nuit ;)

Publié : mer. 11/juil./2007 17:15
par comtois
Quand tu seras réveillé ,essaye quand même de nous dire ce qu'elle fait cette fameuse fonction LoadAnimSprite , c'est dans quel langage ?
Peut-être qu'on pourra te faire un exemple ?


Bonne nuit

comment vai je expliquer tout ça moi ? grat, grat

Publié : jeu. 12/juil./2007 9:42
par beauregard
comtois a écrit :Quand tu seras réveillé ,essaye quand même de nous dire ce qu'elle fait cette fameuse fonction LoadAnimSprite , c'est dans quel langage ?
Peut-être qu'on pourra te faire un exemple ?


Bonne nuit
bonjour ! Alors voici un exemple:

Code : Tout sélectionner

gargamel=LoadAnimImage ("pasbeau.png", 64, 64, 0, 8)
Découpe l'image pasbeau.png en 8 images ( la découpe commençant par en haut à gauche).
Et chacune de ces 8 images nouvellement produites donc, nommée par mes soin gargamel, auront toutes une taille de 64*64.

exemples montrant comment afficher ces images:

Code : Tout sélectionner

DrawImage gargamel, x, y, 0   ; affiche la 1er image. 
DrawImage gargamel, x, y, 1   ; affiche la 2ème image.

Et maintenant le bouquet final, l'animation:

Code : Tout sélectionner

a=a+1
If  a=7 
  a=0
EndIf
DrawImage gargamel, x, y, a

simple et efficace, et à la porté de tous.

heu... et voilà pourquoi, heu, comme pb est surdoué avec les sprites3D, dans mon esprit tourmenté LoadAnimImage se transforme en LoadAnimSprite. qui n'existe pas donc, ou presque car si j'ai bien compris il faut mainteant utiliser CreateanimSprite.

Publié : jeu. 12/juil./2007 18:37
par comtois
Ok , je comprends mieux, alors la fonction équivalente c'est ClipSprite().


Tu trouveras un petit tut qui explique comment fonctionne clipSprite() ici