Mad Fire : les méchants arrivent et ils ne sont pas contents
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.
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
Sympa, mais le code, aïe...
Trop de répétition , cela rend le jeu rigide.
Essaye de structuré le code , par exemple :
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.
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
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
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)
Bon courage

-
- Messages : 1307
- Inscription : dim. 08/juil./2007 18:32
- Localisation : Toulouse
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.
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
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.
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
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
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
-
- Messages : 1307
- Inscription : dim. 08/juil./2007 18:32
- Localisation : Toulouse
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.
Ce sera visible après le grand nettoyage
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...
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
Je structure et essaye de comprendre comment caster dynamiquement les structures...Il reste donc encore du code pourri mais ça personne ne le verra.

Ce sera visible après le grand nettoyage

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...

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
Bonne continuation,
tout ceci est prometteur !
tout ceci est prometteur !

~~~~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
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳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
-
- Messages : 1307
- Inscription : dim. 08/juil./2007 18:32
- Localisation : Toulouse
une demande que j'ai formulé longtemps, et pis un beau jour, sans prévenir, eddy nous pondis ce merveille codeCool Dji a écrit :Well,
peut etre que clipsprite et Sprite3D ne copulent pas bien ensemble aussi ?!? je ressayerai à l'occase
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
;}
-
- Messages : 1307
- Inscription : dim. 08/juil./2007 18:32
- Localisation : Toulouse
sprite2D -> mémoire viveCool 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 !!
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 !

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.)