moi pas comprendre.... moi nouveau

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Fig
Messages : 1176
Inscription : jeu. 14/oct./2004 19:48

moi pas comprendre.... moi nouveau

Message par Fig »

Tout d'abord, salut à tous, j'chuis nouveau.

Quelqu'un peut il m'expliquer comment ça marche pas lentement, ça ?
c'est juste un essais.

Code : Tout sélectionner

initSprite()
OpenScreen(1024,768,32,"")
a.w=1:y.w=11:x.w=11:b.w=1
LoadSprite(0,"balle.bmp")
For i=1 To 5000
DisplaySprite(0,x,y)
If x=1000 Or x=1:a=-a:EndIf
If y=730 Or y=1:b=-b:EndIf
x=x+a:y=y+b
FlipBuffers()
Next
CloseScreen()
End

Est ce qu'il y a un rapport avec le fait que je n'ai pas (encore ???) acheté la version ? ca explique la lenteur du truc ?
Il y a deux méthodes pour écrire des programmes sans erreurs. Mais il n’y a que la troisième qui marche.
Version de PB : 6.00LTS - 64 bits
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

Essaye en mettant

FlipBuffers(0)

Code : Tout sélectionner

InitSprite() 
InitKeyboard()
OpenScreen(1024,768,32,"") 
a.w=1:y.w=11:x.w=11:b.w=1 
CreateSprite(0,64,64)
StartDrawing(SpriteOutput(0))
Box(0,0,64,64,RGB(255,0,0))
StopDrawing()
i=1
Repeat
  ClearScreen(0,0,0)
  
  DisplaySprite(0,x,y) 
  If x=1000 Or x=1
    a=-a
  EndIf 
  If y=730 Or y=1
    b=-b
  EndIf 
  x + a
  y + b 
  i + 1
  FlipBuffers(0) 
  ExamineKeyboard()
Until i > 50000 Or KeyboardPushed(#PB_Key_All)
 
End 
Avatar de l’utilisateur
Fig
Messages : 1176
Inscription : jeu. 14/oct./2004 19:48

Message par Fig »

merci (franc-) Comtois :)
En plus ca m'evite d'attendre la fin de la boucle pour arreter le truc. :10:


1- Est ce que tu (ou qqu'un d'autre tout aussi charitable) peut m'expliquer pourquoi le parametre "0" accelère l'affichage ?

2- Autre question-idiote les sprites doivent ils etre tous carrés avec des dimensions multiples des puissances de 2 ? parceque quand j'affiche ma balle de 30x30 ca lui donne un aspect escalier et ca change la couleur.(2)
(balle sauvegardé au format bmp et 32 bits avec fauxtauchope)
-Edit ca vient de totoshop on dirait en fait, au temps pour moi. :(

3- Enfin derniere question, comment faire si on veut ecrire directement le sprite à l'ecran et l'effacer en affichant par exemple un autre sprite par dessus, donc, sans utiliser la permutation d'ecran. D'apres ce que je comprend avec displaysprite en affiche forcement dans l'ecran caché ( ??)

#jaune
Il y a deux méthodes pour écrire des programmes sans erreurs. Mais il n’y a que la troisième qui marche.
Version de PB : 6.00LTS - 64 bits
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

1 : la réponse est dans la doc

2 : les sprites doivent ils etre tous carrés avec des dimensions multiples des puissances de 2 ?
Non, mais ça ,tu l'avais compris tout seul :)

3: Je ne comprends pas bien ton problème ?

si tu veux afficher un sprite sur un autre

tu peux faire UseBuffer(Nosprite)
et ensuite toutes les commandes Displaysprite se feront sur le sprite que tu as indiqué (NoSprite)
pour revenir à l'affichage normal
UseBuffer(-1)
Oliv
Messages : 2117
Inscription : mer. 21/janv./2004 18:39

Message par Oliv »

Dans le sens où je comprends la question 3 :Tu es obligé d'utiliser FlipBuffers() pour faire apparaitre les modifications à l'écran
Avatar de l’utilisateur
Fig
Messages : 1176
Inscription : jeu. 14/oct./2004 19:48

Message par Fig »

oui !! Désolé si je m'explique mal :?

Merci à tous deux pour vos réponses :idea:

Code : Tout sélectionner

InitSprite() 
InitKeyboard() 
resx.w=800:resy.w=600
OpenScreen(resx,resy,32,"") 
nbballe=30
Dim jeu(nbballe,4)
;LoadSprite(0,"Colline verdoyante.bmp") ;Fond d'ecran Xp
  
   For i=1 To nbballe
       ;LoadSprite(i,"balle.bmp")
       CreateSprite(i,64,64) 
       StartDrawing(SpriteOutput(i)) 
       Box(4,4,60,60,RGB(255,0,0)) 
       StopDrawing() 
       jeu(i,1)=Random(resx-10)+2:jeu(i,2)=Random(resy-10)+2
       jeu(i,3)=1:jeu(i,4)=1
    Next

d=SpriteHeight(1):e=SpriteWidth(1)

  Repeat 
   ;DisplaySprite(0,0,0) ; affichage du fond d'ecran à la place du clearscreen ci dessous.
    ClearScreen(0,0,0) 
   For i=1 To nbballe
        DisplayTransparentSprite(i,jeu(i,1),jeu(i,2)) 
        If jeu(i,1)=resx-e Or jeu(i,1)=1 
        jeu(i,3)=-jeu(i,3) 
        EndIf 
        If jeu(i,2)=resy-d Or jeu(i,2)=1 
        jeu(i,4)=-jeu(i,4) 
        EndIf 
    jeu(i,1)=jeu(i,1) + jeu(i,3) 
    jeu(i,2)=jeu(i,2) + jeu(i,4) 
    Next
  
  FlipBuffers(0)
  ExamineKeyboard() 
Until KeyboardPushed(#PB_Key_All) 
End 
Voila ca fonctionne ... Ca me rappelle le bon vieux temps.

A partir d'une trentaine de "balles" (nbballe=30) ca ralenti...


Quelqu'un aurait il un lien ou un exemple sur l'integration de l'assembleur dans le PureCode ?

Encore merci :)
Il y a deux méthodes pour écrire des programmes sans erreurs. Mais il n’y a que la troisième qui marche.
Version de PB : 6.00LTS - 64 bits
Heis Spiter
Messages : 1092
Inscription : mer. 28/janv./2004 16:22
Localisation : 76
Contact :

Message par Heis Spiter »

Va dans Compilateur->Options de compilation et coche Activer l'assembleur en ligne.
Ensuite il te suffit d'écrire de l'assembleur normalement. Cependant, les label (d'asm) doivent être précédés d'un !
Heis Spiter, webmaster du site http://www.heisspiter.net
Développeur principal et administrateur du projet Bird Chat
Parti courir au bonheur du dév. public et GPL :D
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

Fig a écrit :Quelqu'un aurait il un lien ou un exemple sur l'integration de l'assembleur dans le PureCode ?
Fred est un sacré bosseur :D , y a ce qu'il faut dans la doc

Ouvre l'aide avec F1, clique sur rechercher et tape assembleur

et dans le résultat tu clique sur inline ASM

Et si t'as des problèmes tu poste le code et y'en a bien qui vont te répondre :wink:
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

A partir d'une trentaine de "balles" (nbballe=30) ca ralenti...

t'a pas de bol !
j'ai mis pour voir 3000 sprites 64x64 en 1024x768 32
je ne note aucun ralentissement !!
:D
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

tu n'as pas besoin de créer 30 fois le même sprite .

Code : Tout sélectionner

InitSprite() 
InitKeyboard() 
resx.w=800:resy.w=600 
OpenScreen(resx,resy,32,"") 
nbballe=30 
Dim jeu(nbballe,4) 

CreateSprite(0,64,64) 
StartDrawing(SpriteOutput(0)) 
  Circle(32,32,30,RGB(255,0,0)) 
StopDrawing() 

For i=1 To nbballe  
  jeu(i,1)=Random(resx-10)+2:jeu(i,2)=Random(resy-10)+2 
  jeu(i,3)=1:jeu(i,4)=1 
Next 

d=SpriteHeight(0):e=SpriteWidth(0) 

Repeat 
  ClearScreen(0,0,0) 
  For i=1 To nbballe 
    DisplayTransparentSprite(0,jeu(i,1),jeu(i,2)) 
    If jeu(i,1)=resx-e Or jeu(i,1)=1 
      jeu(i,3)=-jeu(i,3) 
    EndIf 
    If jeu(i,2)=resy-d Or jeu(i,2)=1 
      jeu(i,4)=-jeu(i,4) 
    EndIf 
    jeu(i,1) + jeu(i,3) 
    jeu(i,2) + jeu(i,4) 
  Next 
  
  FlipBuffers() 
  ExamineKeyboard() 
Until KeyboardPushed(#PB_Key_All) 
End
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

tu n'as pas besoin de créer 30 fois le même sprite
c'est parceque si j'ai bien compris le pure n'utilise pas les sprites au sens ou on les entends habituellement !!
il utilise des images_de _sprite !! puisque les collision ne sont pas geré par rapport a un numero de sprite (comme en dark basic) , mais par rapport a la coordonée de l' image !!

c'est pour ça que comtois utilise seulement l'image de sprite numero 0
pour afficher plein de "sprites" a l'ecran !!

en fait les sprites purebasic ne sont pas des vrais sprites

ce sont des images qui ont un comportement de sprites , car ces images
sauvegarde toute seules le fond de l'ecran !! , la s'arrete la comparaison avec un Vrais Sprite !!
qui lui gere son numero (handle) et une table de sa position(geré par le langage)
qui permet de savoir "Facilement" ou il se trouve !! avec une fonction du style
"xp=spriteX(numero de sprite)"
et des fonctions du genre
valeur renvoyée=sprite collision(numsprite1,numsprite cible)
renvoie 1 si le sprite1 touche le sprite cible indiqué par le programmeur
ou encore mieux, renvoi le numero du sprite touché si numsprite cible=0
et la c'est de la balle !! plus besoin de faire une enquete digne d'agatha christie pour savoir qui touche le sprite observé !!!
desolé mais pas comprendre que ce genre de fonctions est indispensable
pour moins de prendre la tete et avoir des listing plus court, c'est dommage non ?



certains m'on deja demontrés que l'on pouvais creer soit meme une table de se genre , c'est vrai ! , mais je trouve que des vrais sprites dans le pure aurai ete super geant !! pour la facilité de la programmation qu'il engendre
bref j'aurai aimé que les deux system soit possible !
mais pour des raisons qui m'echappe Fred ne veux pas faire du "Francois Lionet" (Stos) , peut etre la fleme ??, il a été clair sur ce sujet,
ce qui continuera d'engendrer des reactions comme c'elle-ci dessus
car le pure basic deroute dans l'utilisation de ses "sprites" par rapport aux basics "traditionel" , :?








:D
Avatar de l’utilisateur
Fig
Messages : 1176
Inscription : jeu. 14/oct./2004 19:48

Message par Fig »

ha oui, mais je voulais savoir combien de sprite differents je pouvais afficher par curiosité c'etait en prévision... comme j'avais la flègme de dessiner plein de sprites differents... :wink:

Mais j'ai ien compris l'histoire des "images" de sprite !!

danke :)
Il y a deux méthodes pour écrire des programmes sans erreurs. Mais il n’y a que la troisième qui marche.
Version de PB : 6.00LTS - 64 bits
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

je voulais appuyer sur le fait qu'en purebasic un sprite est une image avec un comportement specifique
alors qu'un sprite dans beaucoup de langage est un objet désigné par un numero (son nom) qui lui est propre , avec sa pletores de fonctions qui l'accompagne , et qui sont tres utile :D


du coup; je pense qu'en pure basic on doit pouvoir faire des sprites sans utiliser une seule fonction lié aux sprite !! :) :? (attention je ne dit pas que c'est un avantage , c'est plutot moqueur !! :) )

faire un jeux en 2D avec des sprite en darkbasic est plus rapide
et plus agreable pour le programmeur !!
meme si bien sur la vitesse n'a rien a voir !

vivement le Pure-Dark !!!
Avatar de l’utilisateur
Crystal Noir
Messages : 892
Inscription : mar. 27/janv./2004 10:07

Message par Crystal Noir »

Sauf que contrairement à pure, le dark je ne trouve pas qu'il soit bien structuré comme lanagage, ca devient vite la jungle.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

je faisai juste allusion au system des sprites , que je trouve bien fait !! :)
Répondre