PureBasic

Forums PureBasic
Nous sommes le Jeu 20/Juin/2013 11:52

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 132 messages ]  Aller à la page Précédente  1, 2, 3, 4, 5 ... 9  Suivante
Auteur Message
 Sujet du message:
MessagePosté: Ven 12/Déc/2008 18:55 
Hors ligne

Inscription: Mer 21/Jan/2004 17:48
Messages: 4557
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.


Haut
 Profil  
 
 Sujet du message:
MessagePosté: Ven 12/Déc/2008 19:08 
Sympa, mais le code, aïe...



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


Code:
; 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:
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:
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 ;)


Haut
  
 
 Sujet du message:
MessagePosté: Ven 12/Déc/2008 19:09 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 08/Juil/2007 18:32
Messages: 1306
Localisation: Toulouse
non, finallement, après réflexion, 4 pixels répartis à gauche droite haut et bas est la bonne solution...


Haut
 Profil  
 
 Sujet du message:
MessagePosté: Sam 13/Déc/2008 21:52 
Hors ligne

Inscription: Mer 21/Jan/2004 17:48
Messages: 4557
Cpl.Bator tu peux aussi remplacer ta fonction AfficheObjet() par :
Code:
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.


Haut
 Profil  
 
 Sujet du message:
MessagePosté: Sam 13/Déc/2008 21:59 
non , car tu peut pas casté dynamiquement les types de structures.

Citation:
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


Haut
  
 
 Sujet du message:
MessagePosté: Sam 13/Déc/2008 23:15 
Hors ligne

Inscription: Mer 21/Jan/2004 17:48
Messages: 4557
ok , dans ce cas utilise la fonction OffsetOf( ) c'est plus lisible et si tu modifies la structure Objet ça marchera toujours :)

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


Haut
 Profil  
 
 Sujet du message:
MessagePosté: Dim 14/Déc/2008 1:59 
oui tout a fait. c'est plus souple.


Haut
  
 
 Sujet du message:
MessagePosté: Mar 16/Déc/2008 10:21 
Hors ligne
Avatar de l’utilisateur

Inscription: Ven 05/Sep/2008 11:42
Messages: 883
Localisation: Besançon
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


Haut
 Profil  
 
 Sujet du message:
MessagePosté: Mer 17/Déc/2008 14:49 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 08/Juil/2007 18:32
Messages: 1306
Localisation: Toulouse
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.


Haut
 Profil  
 
 Sujet du message:
MessagePosté: Lun 29/Déc/2008 23:23 
Hors ligne
Avatar de l’utilisateur

Inscription: Ven 05/Sep/2008 11:42
Messages: 883
Localisation: Besançon
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


Haut
 Profil  
 
 Sujet du message:
MessagePosté: Mar 30/Déc/2008 7:13 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 09/Oct/2005 16:51
Messages: 5323
Bonne continuation,
tout ceci est prometteur ! :P

_________________
.: Ar-S :. - Windows 8 x64 - Radeon HD 7870 - PB 5.11
LDV MULTIMEDIA : Assistance informatique Isère (38) Oyeu
PURE BASIC forum non officiel : Forum PB


Haut
 Profil  
 
 Sujet du message:
MessagePosté: Jeu 01/Jan/2009 22:18 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 08/Juil/2007 18:32
Messages: 1306
Localisation: Toulouse
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/viewtopic.php?p=250910#250910

Code:
;{/// 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
;}


Haut
 Profil  
 
 Sujet du message:
MessagePosté: Ven 02/Jan/2009 11:52 
Hors ligne
Avatar de l’utilisateur

Inscription: Ven 05/Sep/2008 11:42
Messages: 883
Localisation: Besançon
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


Haut
 Profil  
 
 Sujet du message:
MessagePosté: Ven 02/Jan/2009 21:20 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 08/Juil/2007 18:32
Messages: 1306
Localisation: Toulouse
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 ! ;)


Haut
 Profil  
 
 Sujet du message:
MessagePosté: Sam 03/Jan/2009 0:44 
Hors ligne
Avatar de l’utilisateur

Inscription: Ven 11/Fév/2005 17:34
Messages: 3064
Localisation: Arras, France
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.)

_________________
The shooting crew ~> http://www.shootingcrew.com
Bobble Puzzle ~> http://djes.free.fr


Haut
 Profil  
 
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 132 messages ]  Aller à la page Précédente  1, 2, 3, 4, 5 ... 9  Suivante

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages

Rechercher:
Aller à:  

 


Powered by phpBB © 2008 phpBB Group | Traduction par: phpBB-fr.com
subSilver+ theme by Canver Software, sponsor Sanal Modifiye