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

Programmation avancée de jeux en PureBasic
titimoby
Messages : 12
Inscription : sam. 24/avr./2004 13:42
Localisation : France, Villeurbanne
Contact :

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

Message 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)
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message 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 ! :)
titimoby
Messages : 12
Inscription : sam. 24/avr./2004 13:42
Localisation : France, Villeurbanne
Contact :

Message 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.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message 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
:)
Avatar de l’utilisateur
cederavic
Messages : 1338
Inscription : lun. 09/févr./2004 23:38
Localisation : Bordeaux

Message 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 :)
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message 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
titimoby
Messages : 12
Inscription : sam. 24/avr./2004 13:42
Localisation : France, Villeurbanne
Contact :

Message par titimoby »

Merci à vous, c'est parfait.
J'espère pouvoir poster quelquechose de concret (source pb et fichier de definition TileStudio) rapidement.
Répondre