Page 1 sur 1

créer un sprite à partir d'un autre (tilestudio)

Publié : mer. 26/mai/2004 22:13
par titimoby
Je suis en train de me familiariser à la fois avec purebasic et tilestudio.
Un de mes soucis est le suivant :
j'ai un bitmap qui contient tout les tiles de ma map.
je sais afficher ma map en gérant des clipsprite du bitmap des tiles
mais, afin de gérer des collisions, j'aimerais créer de vrais sprites pour chaque zone "collisionable".
En gros, je fais pour le moment :

Code : Tout sélectionner

 For i=0 To 24
    For j=0 To 17
      ClipSprite(#tiles, 0, 32*level(i,j,3), 32, 32)
      DisplaySprite(#tiles, level(i,j,1),level(i,j,2))
    Next j
  Next i
mais j'aimerai faire quelquechose du genre :

Code : Tout sélectionner

 For i=0 To 24
    For j=0 To 17
CreateSprite(i*j,32,32)
      StartDrawing(SpriteOutput(i*j))
      ClipSprite(#tiles, 0, 32*level(i,j,3), 32, 32)
      DisplaySprite(#tiles, level(i,j,1),level(i,j,2))
      StopDrawing()
    Next j
  Next i
Existe t'il une méthode plus correcte ?
(je n'ai encore pas pu lancer ce code, le pc avec PB est indisponible)

Publié : jeu. 27/mai/2004 0:04
par Backup
si le but est de creer un sprite autonome a partir d'une image

je te conseil : GrabSprite(#Sprite, x, y, Largeur, Hauteur)
Description

Capture la zone de l'écran spécifié et crée un nouveau #Sprite avec son contenu.

c'est plus simple ! :)

Publié : jeu. 27/mai/2004 9:12
par titimoby
Ca à l'air de mieux convenir sur le papier.
Mais l'écran qui sert à cette extraction peut il être spécifié ?
Je veux dire par là, peux on utiliser GrabSprite sur un écran uniquement en mémoire ?
Puis je utiliser pour cela le même principe de start/stopDrawing ?

Pas la peine de répondre super vite, je ferais moi même des tests ce soir.

Publié : ven. 28/mai/2004 1:12
par Backup
en fait je crois que ça marche avec l'ecran courrant

mais les operation de grabage peuve etre fait sans que personne ne le voit
il suffit de ne pas montrer l'ecran avec flipbuffer

tant que cette instruction n'est pas utilisée, personne ne peut voir ce que tu fabrique sur l'ecran, si tu nettoie tout l'ecran avec un bon vieux cls (ClearScreen(Rouge, Vert, Bleu)
) en principe apres tu peut montrer ton ecran pour autre choses
:)

Publié : ven. 28/mai/2004 5:48
par cederavic
ben c'est assez simple en fait, imaginon que tu ai un gros sprite qui regroupe plein tiles, dison 100 de 32 * 32, tu va faire 2 boucle for step next avec des grab sprite, un code a la volée

Code : Tout sélectionner

 loadsprite(0, "blabla")

 usebuffer(0)
 for x = 0 to 320 step 32
  for y = 0 to 320 step 32
   numsprite + 1
   grabsprite(numsprite, x, y, 32, 32)
  next
 next

et voila :)

Publié : ven. 28/mai/2004 9:18
par Backup
le meme optimisé par un belge !!

loadsprite(0, "blabla"):usebuffer(0):for x = 0 to 320 step 32:for y = 0 to 320 step 32: numsprite + 1:grabsprite(numsprite, x, y, 32, 32):next:next

une seule ligne de programme : !!!!! :D :D :D :D :D

Publié : ven. 28/mai/2004 10:50
par titimoby
Merci à vous, c'est parfait.
J'espère pouvoir poster quelquechose de concret (source pb et fichier de definition TileStudio) rapidement.