Mad Fire : les méchants arrivent et ils ne sont pas contents

Programmation avancée de jeux en PureBasic
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

tu as essayé avec la 4.30 et le subsystem directx9 ? SpritePixelCollision semble bien fonctionner avec ton code.
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
Anonyme

Message par Anonyme »

Sympa, mais le code, aïe...



Trop de répétition , cela rend le jeu rigide.

Code : Tout sélectionner

 ; Pour le clone1
 For i=0 To 100
  If MissileOn(i)=0
   Missileon(i)=1
   MissileX(i)=oldPosplayerX-16-8
   MissileY(i)=oldPosplayerY-10
   
   i=100 ; sort de la boucle
  EndIf
 Next


 ; Pour le clone2
 For i=0 To 100
  If MissileOn(i)=0
   Missileon(i)=1
   MissileX(i)=oldPosplayerX+64+16
   MissileY(i)=oldPosplayerY-10
   
   i=100 ; sort de la boucle
  EndIf
 Next

 ; Pour le clone3
 For i=0 To 100
  If MissileOn(i)=0
   Missileon(i)=1
   MissileX(i)=oldPosplayerX-16-32-12
   MissileY(i)=oldPosplayerY-10
   
   i=100 ; sort de la boucle
  EndIf
 Next


 ; Pour le clone4
 For i=0 To 100
  If MissileOn(i)=0
   Missileon(i)=1
   MissileX(i)=oldPosplayerX+64+16+4+32
   MissileY(i)=oldPosplayerY-10
   
   i=100 ; sort de la boucle
  EndIf
 Next
Essaye de structuré le code , par exemple :

Code : Tout sélectionner

Structure Vecteur2
  x.f
  y.f
EndStructure

Structure Objet
  Position.Vecteur2
  Vitesse.f
  Vie.f
EndStructure


Structure Missile Extends Objet
  SpriteID.l
  Target.Vecteur2
EndStructure

La structure Objet est donc la structure de base , Missile est une extension à objet , cela évite de te retapé à écrire du code dans ta structure Missile.

Pour chaque structure fille ( comme missile ) tu codes les procédure de gestion , d'affichage , etc...
Tu dois gagné en clarté dans ton code.

Tu peut même aller plus loin , càd avoir une fonction unique pour l'affichage de tout tes éléments.

Code : Tout sélectionner

Structure Vecteur2
  x.f
  y.f
EndStructure

Structure Objet
  Position.Vecteur2
  Vitesse.f
  Vie.f
  *Procedure_Affichage.l
EndStructure


Structure Missile Extends Objet
  SpriteID.l
  Target.Vecteur2
EndStructure


 
 Procedure AfficheObjet(*Objet.l)
    AdresseProcedure = PeekL(*Objet+16) ; 16 c'est l'offset dans la structure !
    CallCFunctionFast(AdresseProcedure)
 EndProcedure



Procedure AffichageDuMissile()
Debug "le missile est affiché!"
EndProcedure


MonMissile.Missile
MonMissile\Procedure_Affichage = @AffichageDuMissile()

AfficheObjet(MonMissile) 
Comme ca , tu sépares bien tes codes , chaque objet de nature différentes dans un fichier pbi. chaque objet (missille , bonus , élément divers) à sa propre routine d'affichage , mais l'appel à l'affichage de l'objet suffit à affiché l'objet ! ( regarde le p'tit code du haut )

Bon courage ;)
beauregard
Messages : 1307
Inscription : dim. 08/juil./2007 18:32
Localisation : Toulouse

Message par beauregard »

non, finallement, après réflexion, 4 pixels répartis à gauche droite haut et bas est la bonne solution...
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

Cpl.Bator tu peux aussi remplacer ta fonction AfficheObjet() par :

Code : Tout sélectionner

 Procedure AfficheObjet(*Objet.Objet)
  CallCFunctionFast(*Objet\Procedure_Affichage)
 EndProcedure
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
Anonyme

Message par Anonyme »

non , car tu peut pas casté dynamiquement les types de structures.
structure Missile extends Objet
blaba.l
etc.l...
endstructure

Procedure AfficheObjet(*Objet.Objet)
CallCFunctionFast(*Objet\Procedure_Affichage)
EndProcedure



MaRockette.Missile

AfficheObjet(Missile) ;Erreur de cast
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

ok , dans ce cas utilise la fonction OffsetOf( ) c'est plus lisible et si tu modifies la structure Objet ça marchera toujours :)

Code : Tout sélectionner

 Procedure AfficheObjet(*Objet.l)
    AdresseProcedure = PeekL(*Objet+OffsetOf(Objet\Procedure_Affichage)) ; 
    CallCFunctionFast(AdresseProcedure)
 EndProcedure
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
Anonyme

Message par Anonyme »

oui tout a fait. c'est plus souple.
Avatar de l’utilisateur
Cool Dji
Messages : 1126
Inscription : ven. 05/sept./2008 11:42
Localisation : Besançon
Contact :

Message par Cool Dji »

Bonjour à tous,
Merci à vous tous pour toutes ces infos...

J'ai commené à structurer et structurer encore...

Sinon, je vais tester le 4.3 pour le clipsprit (j'avais déjà tout découpé les images et le spritepixelcollision fonctionne du tonnere sans le clipsprite).
En revanche, sprite3D avec start3D rallentit a fond le jeu. Certes, les effets sont geniaux mais je ne les utiliserai pas...

Pour, l'instant, les collisions avec le décor fonctionnent (missiles et ship) + explosions quand ça touche.
J'ai reprogrammé une fonction d'écriture avec des fontes sprites

France Telecom a débranché notre ligne pour brancher celle du voisin !!
J'ai fait et ferai donc le mort quelques jours encore...je prends quelques instants au bureau pour ce topic.
J'enregistre tous vos messages pour les regarder plus tranquillement à la maison

Voila, voila
Only PureBasic makes it possible
beauregard
Messages : 1307
Inscription : dim. 08/juil./2007 18:32
Localisation : Toulouse

Message par beauregard »

Cool Dji a écrit :Voila, voila
tu as l'air de bien avancer, c'est cool. Mais le problème de ralentissement que tu évoque est des plus étranges... par contre que ft te débranche, çà c'est pas cool, pas cool du tout.
Avatar de l’utilisateur
Cool Dji
Messages : 1126
Inscription : ven. 05/sept./2008 11:42
Localisation : Besançon
Contact :

Message par Cool Dji »

Well,

Je structure et essaye de comprendre comment caster dynamiquement les structures...Il reste donc encore du code pourri mais ça personne ne le verra. :oops:
Ce sera visible après le grand nettoyage 8)

J'ai finalisé les collisions avec le décor (missiles et ship du player, pas les clones) : j'ai eu encore un soucis avec Clipsprite et spritepixelcollision meme en PB 4.3...Du coup, je découpe les tuiles du décor en mémoire et le pointage s'en trouve simplifié.
J'ai laissé des carrés blancs de debuggage des collisions avec le premier plan du décor (+ test carré rouge avec la souris).
Sinon, j'ai recomparé SpecialFX et Sprite3D et l'affichage est plus rapide en SpecialFX (Tout ce qui est affiché : tuiles, étoiles, missilles..=sprites) => Cela me surprend car normalement l'inverse devrait se produire... :idea: peut etre que clipsprite et Sprite3D ne copulent pas bien ensemble aussi ?!? je ressayerai à l'occase
Sinon, un truc qui marche et facile à faire : j'ai mis de la Zic et du son pour répondre à la demande de JBernard...

http://xdji.free.fr/Telechargement/MadFire.zip
Only PureBasic makes it possible
Avatar de l’utilisateur
Ar-S
Messages : 9539
Inscription : dim. 09/oct./2005 16:51
Contact :

Message par Ar-S »

Bonne continuation,
tout ceci est prometteur ! :P
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
beauregard
Messages : 1307
Inscription : dim. 08/juil./2007 18:32
Localisation : Toulouse

Message par beauregard »

Cool Dji a écrit :Well,
peut etre que clipsprite et Sprite3D ne copulent pas bien ensemble aussi ?!? je ressayerai à l'occase
une demande que j'ai formulé longtemps, et pis un beau jour, sans prévenir, eddy nous pondis ce merveille code
http://www.purebasic.fr/english/viewtop ... 910#250910

Code : Tout sélectionner

;{/// STRUCTURE AND CONSTANTS FOR SPRITE3D
Structure DDPIXELFORMAT
   dwSize.l
   dwFlags.l
   dwFourCC.l
   dwRGBBitCount.l
   dwRBitMask.l
   dwGBitMask.l
   dwBBitMask.l
   dwRGBAlphaBitMask.l
EndStructure
Structure DDCOLORKEY
   dwColorSpaceLowValue.l
   dwColorSpaceHighValue.l
EndStructure
Structure DDSCAPS2
   dwCaps.l
   dwCaps2.l
   dwCaps3.l
   dwCaps4.l
EndStructure
Structure DDSURFACEDESC2
   dwSize.l
   dwFlags.l
   dwHeight.l
   dwWidth.l
   lPitch.l
   dwBackBufferCount.l
   dwRefreshRate.l
   dwAlphaBitDepth.l
   dwReserved.l
   lpSurface.l
   ddckCKDestOverlay.DDCOLORKEY
   ddckCKDestBlt.DDCOLORKEY
   ddckCKSrcOverlay.DDCOLORKEY
   ddckCKSrcBlt.DDCOLORKEY
   ddpfPixelFormat.DDPIXELFORMAT
   ddsCaps.DDSCAPS2
   dwTextureStage.l
EndStructure
Structure D3DTLVERTEX
   sx.f
   sy.f
   sz.f
   rhw.f
   color.l
   specular.l
   tu.f
   tv.f
EndStructure

;Standard Structure from PB
Structure PB_SPRITE3D
   Texture.IDirectDrawSurface7; DirectDrawSurface7
   Vertice.D3DTLVERTEX[4]     ; The 4 vertices for the rectangle sprite
   Width.w                    ; width set with ZoomSprite3D()
   Height.w                   ; height set with ZoomSprite3D()
   unknown.l
EndStructure

;Custom Structure for new functions
Structure PB_SPRITE3D_PLUS
   dist.f[4]   ;//distance
   a.f[4]      ;//angle
EndStructure

;Available Blend Effects
CompilerIf Defined(D3DBLEND_ZERO, #PB_Constant)=0
   #D3DBLEND_ZERO=1
   #D3DBLEND_ONE=2
   #D3DBLEND_SRCCOLOR=3
   #D3DBLEND_INVSRCCOLOR=4
   #D3DBLEND_SRCALPHA=5
   #D3DBLEND_INVSRCALPHA=6
   #D3DBLEND_DESTALPHA=7
   #D3DBLEND_INVDESTALPHA=8
   #D3DBLEND_DESTCOLOR=9
   #D3DBLEND_INVDESTCOLOR=10
   #D3DBLEND_SRCALPHASAT=11
   #D3DBLEND_BOTHSRCALPHA=12
   #D3DBLEND_BOTHINVSRCALPHA=13
CompilerEndIf

;Available Mirror Effects
CompilerIf Defined(PB_MirrorSprite3D_None, #PB_Constant)=0
   #MirrorSprite3D_None=0
   #MirrorSprite3D_Horizontal=1
   #MirrorSprite3D_Vertical=2
   #MirrorSprite3D_Both=#MirrorSprite3D_Horizontal | #MirrorSprite3D_Vertical
CompilerEndIf
;}

;{/// CUSTOM SPRITE3D FUNCTIONS
ProcedureDLL.b MirrorSprite3D(Sprite3D, MirrorMode) ;Mirror 3D sprite image (returns TRUE if any changes)
   Protected *Sprite3D.PB_SPRITE3D=IsSprite3D(Sprite3D)
   Protected MirroringChanges.b=0
   Protected IsMirrored.b
   Protected DoMirroring.b
   
   IsMirrored=*Sprite3D\Vertice[0]\tu>*Sprite3D\Vertice[1]\tu
   DoMirroring=1 And MirrorMode & #MirrorSprite3D_Horizontal
   If (DoMirroring And IsMirrored=0) Or (DoMirroring=0 And IsMirrored)
      MirroringChanges=1
      Swap *Sprite3D\Vertice[0]\tu, *Sprite3D\Vertice[1]\tu
      Swap *Sprite3D\Vertice[2]\tu, *Sprite3D\Vertice[3]\tu
   EndIf
   
   IsMirrored=*Sprite3D\Vertice[0]\tv>*Sprite3D\Vertice[3]\tv
   DoMirroring=1 And MirrorMode & #MirrorSprite3D_Vertical
   If (DoMirroring And IsMirrored=0) Or (DoMirroring=0 And IsMirrored)
      MirroringChanges=1
      Swap *Sprite3D\Vertice[0]\tv, *Sprite3D\Vertice[3]\tv
      Swap *Sprite3D\Vertice[1]\tv, *Sprite3D\Vertice[2]\tv
   EndIf
   
   ProcedureReturn MirroringChanges
EndProcedure
ProcedureDLL.b ClipSprite3D(Sprite3D, ClipX, ClipY, ClipWidth, ClipHeight) ;Add clip zone to the specified 3D sprite
   Protected *Sprite3D.PB_SPRITE3D=IsSprite3D(Sprite3D)
   If *Sprite3D=0 : ProcedureReturn 0 : EndIf
   
   Protected *DDS.IDirectDrawSurface7=*Sprite3D\Texture
   Protected DDSDESC.DDSURFACEDESC2
   DDSDESC\dwSize=SizeOf(DDSURFACEDESC2)
   Protected Result=*DDS\GetSurfaceDesc(DDSDESC)
   If Result : ProcedureReturn 0 : EndIf
   
   *Sprite3D\Vertice[0]\tu=ClipX/DDSDESC\dwWidth
   *Sprite3D\Vertice[0]\tv=ClipY/DDSDESC\dwHeight
   
   *Sprite3D\Vertice[1]\tu=(ClipX+ClipWidth)/DDSDESC\dwWidth
   *Sprite3D\Vertice[1]\tv=ClipY/DDSDESC\dwHeight
   
   *Sprite3D\Vertice[2]\tu=ClipX/DDSDESC\dwWidth
   *Sprite3D\Vertice[2]\tv=(ClipY+ClipHeight)/DDSDESC\dwHeight
   
   *Sprite3D\Vertice[3]\tu=(ClipX+ClipWidth)/DDSDESC\dwWidth
   *Sprite3D\Vertice[3]\tv=(ClipY+ClipHeight)/DDSDESC\dwHeight
   
   *Sprite3D\Vertice[0]\sx=0
   *Sprite3D\Vertice[0]\sy=0
   *Sprite3D\Vertice[0]\sz=0
   
   *Sprite3D\Vertice[1]\sx=ClipWidth
   *Sprite3D\Vertice[1]\sy=0
   *Sprite3D\Vertice[1]\sz=0
   
   *Sprite3D\Vertice[2]\sx=0
   *Sprite3D\Vertice[2]\sy=ClipHeight
   *Sprite3D\Vertice[2]\sz=0
   
   *Sprite3D\Vertice[3]\sx=ClipWidth
   *Sprite3D\Vertice[3]\sy=ClipHeight
   *Sprite3D\Vertice[3]\sz=0
   
   *Sprite3D\Width=ClipWidth
   *Sprite3D\Height=ClipHeight
   
   ProcedureReturn 1 ; return success
EndProcedure
ProcedureDLL.l CreateClippedSprite3D(Sprite3D, Sprite, ClipX, ClipY, ClipWidth, ClipHeight) ;Create a new 3D sprite with the selected area from 2D sprite
   Protected res=CreateSprite3D(Sprite3D, Sprite)
   If Sprite3D=#PB_Any : Sprite3D=res : EndIf
   
   If res And ClipX<>#PB_Ignore
      ClipSprite3D(Sprite3D, ClipX, ClipY, ClipWidth, ClipHeight)
   EndIf
   
   ProcedureReturn res
EndProcedure
ProcedureDLL.l CopySprite3D(Sprite3D1, Sprite3D2) ;Copy the #Sprite3D1 to #Sprite3D2
   Protected *Sprite3D1.PB_SPRITE3D=IsSprite3D(Sprite3D1)
   If *Sprite3D1=0 : ProcedureReturn 0 : EndIf
   
   Protected Sprite=CreateSprite(#PB_Any, 1, 1, #PB_Sprite_Texture)
   If Sprite=0 : ProcedureReturn 0 : EndIf
   
   Protected res=CreateSprite3D(Sprite3D2, Sprite)
   If res=0 : FreeSprite(Sprite) : ProcedureReturn 0 : EndIf
   If Sprite3D2=#PB_Any : Sprite3D2=res : EndIf
   
   Protected *Sprite3D2.PB_SPRITE3D=IsSprite3D(Sprite3D2)
   *Sprite3D2\Texture=*Sprite3D1\Texture
   *Sprite3D2\Width=*Sprite3D1\Width
   *Sprite3D2\Height=*Sprite3D1\Height
   *Sprite3D2\unknown=*Sprite3D1\unknown
   
   For i=0 To 3
      *Sprite3D2\Vertice[i]\sx=*Sprite3D1\Vertice[i]\sx
      *Sprite3D2\Vertice[i]\sy=*Sprite3D1\Vertice[i]\sy
      *Sprite3D2\Vertice[i]\sz=*Sprite3D1\Vertice[i]\sz
      *Sprite3D2\Vertice[i]\rhw=*Sprite3D1\Vertice[i]\rhw
      *Sprite3D2\Vertice[i]\color=*Sprite3D1\Vertice[i]\color
      *Sprite3D2\Vertice[i]\specular=*Sprite3D1\Vertice[i]\specular
      *Sprite3D2\Vertice[i]\tu=*Sprite3D1\Vertice[i]\tu
      *Sprite3D2\Vertice[i]\tv=*Sprite3D1\Vertice[i]\tv
   Next
   
   FreeSprite(Sprite)
   ProcedureReturn *Sprite3D2
EndProcedure
ProcedureDLL FreeSprite3DParameters(Sprite3D);Free memory allocated for new Sprite3D parameters
   Protected *Sprite3D.PB_SPRITE3D=IsSprite3D(Sprite3D)
   If *Sprite3D\Vertice[3]\sz
      FreeMemory(*Sprite3D\Vertice[3]\sz)
      *Sprite3D\Vertice[3]\sz=0
   EndIf
EndProcedure

ProcedureDLL SetSprite3DAlpha(Sprite3D, alpha)                 ;Set 3D sprite alpha (transparency 0 - 255)
   Protected *Sprite3D.PB_SPRITE3D=IsSprite3D(Sprite3D)
   alpha<<24
   For i=0 To 3
      *Sprite3D\Vertice[i]\color & $00FFFFFF+alpha
   Next
EndProcedure
ProcedureDLL SetSprite3DColor(Sprite3D, color)                 ;Set 3D sprite color (RGB)
   Protected *Sprite3D.PB_SPRITE3D=IsSprite3D(Sprite3D)
   color=Blue(color)+(Green(color)<<8)+(Red(color)<<16)
   For i=0 To 3
      *Sprite3D\Vertice[i]\color & $FF000000+color
   Next
EndProcedure
ProcedureDLL SetSprite3DHandle(Sprite3D, HandleX, HandleY)     ;Set 3D sprite handle (X,Y)
   Protected *Sprite3D.PB_SPRITE3D=IsSprite3D(Sprite3D)
   
   *Sprite3D\Vertice[0]\sx=-HandleX
   *Sprite3D\Vertice[0]\sy=-HandleY
   *Sprite3D\Vertice[0]\sz=(HandleX);Trick
   
   *Sprite3D\Vertice[1]\sx=-HandleX+*Sprite3D\Width
   *Sprite3D\Vertice[1]\sy=-HandleY
   *Sprite3D\Vertice[1]\sz=(HandleY);Trick
   
   *Sprite3D\Vertice[2]\sx=-HandleX
   *Sprite3D\Vertice[2]\sy=-HandleY+*Sprite3D\Height
   ;*Sprite3D\Vertice[2]\sz=(Rotation);Trick
   
   *Sprite3D\Vertice[3]\sx=-HandleX+*Sprite3D\Width
   *Sprite3D\Vertice[3]\sy=-HandleY+*Sprite3D\Height
   ;*Sprite3D\Vertice[3]\sz=*param.PB_SPRITE3D_PLUS
   
   Protected *param.PB_SPRITE3D_PLUS=*Sprite3D\Vertice[3]\sz
   If *param=0
      *param=AllocateMemory(SizeOf(PB_SPRITE3D_PLUS))
      *Sprite3D\Vertice[3]\sz=*param
   EndIf
   
   For i=0 To 3
      *param\dist[i]=Sqr(Pow(*Sprite3D\Vertice[i]\sx, 2)+Pow(*Sprite3D\Vertice[i]\sy, 2))
      If (*Sprite3D\Vertice[i]\sx=0)
         *param\a[i]=ATan(*Sprite3D\Vertice[i]\sy/0.0000000001)
      ElseIf *Sprite3D\Vertice[i]\sx>0
         *param\a[i]=ATan(*Sprite3D\Vertice[i]\sy/*Sprite3D\Vertice[i]\sx)
      Else
         *param\a[i]=ATan(*Sprite3D\Vertice[i]\sy/*Sprite3D\Vertice[i]\sx)+#PI
      EndIf
   Next
EndProcedure
ProcedureDLL SetSprite3DHandlePoint(Sprite3D, *Handle.POINT)   ;Set 3D sprite handle POINT
   SetSprite3DHandle(Sprite3D, *Handle\x, *Handle\y)
EndProcedure
ProcedureDLL SetSprite3DSize(Sprite3D, Width, Height)          ;Set 3D sprite size
   Protected *Sprite3D.PB_SPRITE3D=IsSprite3D(Sprite3D)
   
   *Sprite3D\Width=Width
   *Sprite3D\Height=Height
   
   SetSprite3DHandle(Sprite3D, *Sprite3D\Vertice[0]\sz, *Sprite3D\Vertice[1]\sz)
EndProcedure
ProcedureDLL SetSprite3DAngle(Sprite3D, Angle, Mode)           ;Set 3D sprite angle (rotation if mode=1)
   Protected *Sprite3D.PB_SPRITE3D=IsSprite3D(Sprite3D)
   
   If Mode : Angle+*Sprite3D\Vertice[2]\sz : EndIf
   *Sprite3D\Vertice[2]\sz=Angle
   
   If *Sprite3D\Vertice[3]\sz=0
      SetSprite3DHandle(Sprite3D, *Sprite3D\Vertice[0]\sz, *Sprite3D\Vertice[1]\sz)
   EndIf
   
   Protected *param.PB_SPRITE3D_PLUS=*Sprite3D\Vertice[3]\sz
   For i=0 To 3
      Protected dist.f=*param\dist[i]
      Protected a.f=*param\a[i]
      a+Angle*#PI/180.0
      *Sprite3D\Vertice[i]\sx=dist*Cos(a)
      *Sprite3D\Vertice[i]\sy=dist*Sin(a)
   Next
EndProcedure
ProcedureDLL.l GetSprite3DMirrorMode(Sprite3D)                 ;Get 3D sprite Mirroring mode
   Protected *Sprite3D.PB_SPRITE3D=IsSprite3D(Sprite3D)
   
   Protected MirroringMode=#MirrorSprite3D_None
   If *Sprite3D\Vertice[0]\tu>*Sprite3D\Vertice[1]\tu
      MirroringMode | #MirrorSprite3D_Horizontal
   EndIf
   If *Sprite3D\Vertice[0]\tv>*Sprite3D\Vertice[3]\tv
      MirroringMode | #MirrorSprite3D_Vertical
   EndIf
   
   ProcedureReturn MirroringMode
EndProcedure
ProcedureDLL.l GetSprite3DAlpha(Sprite3D)                      ;Get 3D sprite alpha
   Protected *Sprite3D.PB_SPRITE3D=IsSprite3D(Sprite3D)
   Protected alpha=*Sprite3D\Vertice[0]\color & $FF000000
   alpha>>24
   ProcedureReturn alpha
EndProcedure
ProcedureDLL.l GetSprite3DColor(Sprite3D)                      ;Get 3D sprite color
   Protected *Sprite3D.PB_SPRITE3D=IsSprite3D(Sprite3D)
   Protected color=*Sprite3D\Vertice[0]\color & $00FFFFFF
   ProcedureReturn color
EndProcedure
ProcedureDLL.l GetSprite3DAngle(Sprite3D)                      ;Get 3D sprite angle
   Protected *Sprite3D.PB_SPRITE3D=IsSprite3D(Sprite3D)
   Protected a=*Sprite3D\Vertice[2]\sz
   ProcedureReturn a%360
EndProcedure
ProcedureDLL.l GetSprite3DHandleX(Sprite3D)                    ;Get 3D sprite handle X
   Protected *Sprite3D.PB_SPRITE3D=IsSprite3D(Sprite3D)
   Debug *Sprite3D\Vertice[3]\sz
   ProcedureReturn *Sprite3D\Vertice[0]\sz
EndProcedure
ProcedureDLL.l GetSprite3DHandleY(Sprite3D)                    ;Get 3D sprite handle Y
   Protected *Sprite3D.PB_SPRITE3D=IsSprite3D(Sprite3D)
   ProcedureReturn *Sprite3D\Vertice[1]\sz
EndProcedure
ProcedureDLL GetSprite3DHandle(Sprite3D, *HandleX, *HandleY)   ;Get 3D sprite handle (X,Y)
   Protected *Sprite3D.PB_SPRITE3D=IsSprite3D(Sprite3D)
   PokeL(*HandleX, *Sprite3D\Vertice[0]\sz)
   PokeL(*HandleY, *Sprite3D\Vertice[1]\sz)
EndProcedure
ProcedureDLL GetSprite3DHandlePoint(Sprite3D, *Handle.POINT)   ;Get 3D sprite handle POINT
   Protected *Sprite3D.PB_SPRITE3D=IsSprite3D(Sprite3D)
   *Handle\x=*Sprite3D\Vertice[0]\sz
   *Handle\y=*Sprite3D\Vertice[1]\sz
EndProcedure

Macro SetSprite3DBlend_NORMAL()
   Sprite3DBlendingMode(#D3DBLEND_SRCALPHA, #D3DBLEND_INVSRCALPHA)
EndMacro
Macro SetSprite3DBlend_INVERT()
   Sprite3DBlendingMode(#D3DBLEND_INVDESTCOLOR, #D3DBLEND_INVSRCALPHA)
EndMacro
Macro SetSprite3DBlend_LIGHT()
   Sprite3DBlendingMode(#D3DBLEND_SRCALPHA, #D3DBLEND_ONE)
EndMacro
Macro SetSprite3DBlend_SHADE()
   Sprite3DBlendingMode(#D3DBLEND_ZERO, #D3DBLEND_SRCCOLOR)
EndMacro
Macro RotateSprite3D(Sprite3D, Angle, Mode)                    ;//WRAPPER
   SetSprite3DAngle(Sprite3D, Angle, Mode)
EndMacro
Macro ZoomSprite3D(Sprite3D, Width, Height)                    ;//WRAPPER
   SetSprite3DSize(Sprite3D, Width, Height)
EndMacro
Macro FreeSprite3D(Sprite3D, FreeSprite3DObject=FreeSprite3D)  ;//WRAPPER
   FreeSprite3DParameters(Sprite3D)
   FreeSprite3DObject(Sprite3D)
EndMacro
;} 
Avatar de l’utilisateur
Cool Dji
Messages : 1126
Inscription : ven. 05/sept./2008 11:42
Localisation : Besançon
Contact :

Message par Cool Dji »

Great Mr Eddy,

Merci Beauregard pour ce lien...
Je suis encore de la très vieille école et très bitmap...mais Sprite3D m"'a l'air tres puissant !

Toulouse To Win !!
Only PureBasic makes it possible
beauregard
Messages : 1307
Inscription : dim. 08/juil./2007 18:32
Localisation : Toulouse

Message par beauregard »

Cool Dji a écrit :Great Mr Eddy,

Merci Beauregard pour ce lien...
Je suis encore de la très vieille école et très bitmap...mais Sprite3D m"'a l'air tres puissant !

Toulouse To Win !!
sprite2D -> mémoire vive
sprite3D -> mem video de la carte vidéo
Donc les sprites 3D sont plus intéressant( transparence, rotation et zoom, les doigts dans le nez), et ceux même si le jeu que tu réalise est classique, ces effets existent depuis, heu, la superfamicom... ou pc engine ? ou alors le Commodore 64, mais je n'irai pas plus loin, hein ! ;)
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Message par djes »

Non, tous les sprites sont stockés si possible en mémoire vidéo. Il n'y a que quand tu utilises les effets spéciaux avec StartSpecialFX qu'ils sont traités en mémoire vive. DX7 prenait en charge la 2D classique (fonctions déjà gérées par la carte graphique) et l'affichage 3D à base de polygones (qui sert pour les sprites 3D). DX9 ne prend plus en charge la 2D. Les différences entre sprites 2D et 3D sont connues (pour la 3D : sprites carrés, dimensions multiples de 2 pour assurer la compatibilité, mais effets rapides de rotation/zoom/alpha etc.)
Répondre