Comme les sprite3Ds sont à la mode...

Programmation avancée de jeux en PureBasic
ATHOW
Messages : 226
Inscription : mer. 29/déc./2004 16:54

Comme les sprite3Ds sont à la mode...

Message par ATHOW »

On parle beaucoup de sprite3D en ce moment, vous trouvez pas ? Ben c'est pas pour me déplaire car je bosse pas mal sur les effets 3D/transparence pour mon nouveau projet, et j'apprends plein de trucs grâce à cette fonctionnalité de Pure.

Voici en exclusivité (tadaaaa) les plate-formes qu'utiliseront les protagonistes de mon futur jeu : les WhiteBoxes !

Code : Tout sélectionner

; 26/07/07 by ATHOW
; Some 3D effects in a 2D scrolling :)
; --- White Box ---

;{- Introduction

If InitSprite()=0 Or InitKeyboard()=0 Or InitSprite3D()=0
  MessageRequester("Error", "Verify that DirectX is installed correctly.", 0) 
  End 
EndIf 

If OpenWindowedScreen(OpenWindow(0,0,0,800, 600,"WhiteBox Effect",#PB_Window_ScreenCentered|#PB_Window_SystemMenu|#PB_Window_MinimizeGadget),0,0,800, 600,0,0,0) = 0 
  MessageRequester("Error", "Unable to open a 800x600 screen", 0) 
  End 
EndIf 
KeyboardMode(1)
;}

;{- Constants

; Sprites
Enumeration
  #SPR_WHITESQUARE
  #SPR_GRAYSQUARE
EndEnumeration

;Others
#SCREEN_WIDTH = 800
#SCREEN_HEIGHT = 600
#K = 10 ; the random magic3D effect constant

;}

;{- Structures

Structure box3D
  x.w
  y.w
  width.w
  height.w
EndStructure

;}

;{- Sprites

; The white square sprite3D for displaying the box3Ds

CreateSprite(#SPR_WHITESQUARE,256,256,#PB_Sprite_Texture)
TransparentSpriteColor(#SPR_WHITESQUARE, RGB(255,0,255))

CreateSprite(#SPR_GRAYSQUARE,256,256,#PB_Sprite_Texture)
TransparentSpriteColor(#SPR_GRAYSQUARE, RGB(255,0,255))

StartDrawing(SpriteOutput(#SPR_WHITESQUARE))
For i.w = 0 To 127
  color.w = 150+Int(i/2)
  If(color > 255)
    color = 255
  EndIf
  Box(i,i,256-i,256-i,RGB(color,color,color))
  
Next
StopDrawing()

StartDrawing(SpriteOutput(#SPR_GRAYSQUARE))
For i.w = 0 To 255
  color.w = 180+Int(i/2)
  If(color > 255)
    color = 255
  EndIf
  Line(0,i,256,0,RGB(color,color,color))
Next
StopDrawing()

CreateSprite3D(#SPR_WHITESQUARE,#SPR_WHITESQUARE)
CreateSprite3D(#SPR_GRAYSQUARE,#SPR_GRAYSQUARE)

;}

;{- Global Variables, Constants & Enumeration

; nothing for now :)

;}

;{- Procedure Tools

; nothing for now :)

;}

;{- Graphical Effects

Procedure displayBox3D(x.w,y.w,width.w,height.w)
  ;    E______________________F
  ;   /|                     /|
  ;A /_|_________________B__/ |
  ;  | |                    | |
  ;  | |H___________________|_|G
  ;  |/_____________________|/
  ;   D                    C 
  
  ; The dot(x,y) is the middle of the edge [A,E]
  ; AB = EF = width
  ; AD = EH = height
  ; All the vertex are computed with the vertex E
  
  ex.w = ((#SCREEN_WIDTH/2) / #K) - (x / #K) + x
  ey.w = -((#SCREEN_HEIGHT/10) / #K + y / #K - y)
  
  ax.w = 2 * x - ex
  ay.w = 2 * y - ey
  bx.w = ax + width
  by.w = ay
  cx.w = bx
  cy.w = by + height
  dx.w = ax
  dy.w = cy
  fx.w = ex + width
  fy.w = ey
  gx.w = fx
  gy.w = fy + height
  hx.w = ex
  hy.w = gy
  
   
  Start3D()
  ; display the left face
  TransformSprite3D(#SPR_GRAYSQUARE,ex,ey,ax,ay,dx,dy,hx,hy)
  DisplaySprite3D(#SPR_GRAYSQUARE,0,0,230)
  
  ; display the right face
  TransformSprite3D(#SPR_GRAYSQUARE,bx,by,fx,fy,gx,gy,cx,cy)
  DisplaySprite3D(#SPR_GRAYSQUARE,0,0,230)
   
  ; display the top face
  TransformSprite3D(#SPR_WHITESQUARE,ex,ey,fx,fy,bx,by,ax,ay)
  DisplaySprite3D(#SPR_WHITESQUARE,0,0)
   
  ; display the front face
  TransformSprite3D(#SPR_GRAYSQUARE,ax,ay,bx,by,cx,cy,dx,dy)
  DisplaySprite3D(#SPR_GRAYSQUARE,0,0,230)
  Stop3D()
   
EndProcedure

;}

;{- Screens & Menus

Procedure Main()
  Repeat
    FlipBuffers()
    ClearScreen(RGB(255,255,255))
    
    x=WindowMouseX(0)
    y=WindowMouseY(0)
    
    displayBox3D(x,y,200,300)
    
    ExamineKeyboard()
    Event = WindowEvent()
    
    Delay(2)
  Until KeyboardPushed(#PB_Key_Escape) Or Event = #PB_Event_CloseWindow
EndProcedure

;}


;{- Main routine


Main()

;}
Amusez-vous à bouger la whiteBox, voire à changer ses dimensions (dans le Main) ou la constante K (en début de programme).

Rien de nouveau là-dedans, mais comme c'est la première fois que je manipule ces machins, je suis content de moi...

J'y retourne.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

c'est tres joli ! :D
on dirai un effet phong ! :D
beauregard
Messages : 1307
Inscription : dim. 08/juil./2007 18:32
Localisation : Toulouse

Re: Comme les sprite3Ds sont à la mode...

Message par beauregard »

une savante organisation de ton code, et puis c'est fortiche quand même. un cube idéal pour une adaptation de Q-bert ? ;)

J'ai une petite question de débutant qui n'a rien avoir, mais bon: pour l'aide ( par l'appui sur la touche F1) c'est tout en anglais, il y a t il un moyen de l'avoir en français, comme c'est le cas pour l'aide en ligne ?
Avatar de l’utilisateur
Crystal Noir
Messages : 892
Inscription : mar. 27/janv./2004 10:07

Message par Crystal Noir »

chez moi c en francais, seulement à l'installation de pure il faut bien cocher l'option qui te permet d'installer l'aide en francais....
Avatar de l’utilisateur
Polux
Messages : 440
Inscription : mer. 21/janv./2004 11:17
Localisation : france
Contact :

Message par Polux »

Très astucieux et zoli en plus! Bravo :wink:
beauregard
Messages : 1307
Inscription : dim. 08/juil./2007 18:32
Localisation : Toulouse

Re: Comme les sprite3Ds sont à la mode...

Message par beauregard »

sur le forum allemand, un code très simple simulant la 3D avec de la 2D:

http://www.purebasic.fr/german/viewtopi ... 6b9577f9d8
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Message par djes »

Un petit effet que j'avais fait pour le menu de purebreaker 3... le nouveau est mieux (merci pol ;))
http://djes.free.fr/purebasic/oldmenu.zip
Anonyme

Message par Anonyme »

Beauregard , tu veut de la 3D : :D
http://www.purebasic.fr/french/viewtopi ... 9&start=15

Djes , quoi de 9 avec pb3 ? :P
Avatar de l’utilisateur
Crystal Noir
Messages : 892
Inscription : mar. 27/janv./2004 10:07

Message par Crystal Noir »

En tout cas c'est bien sympa tout ca.
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Message par djes »

Cpl.Bator a écrit :Beauregard , tu veut de la 3D : :D
http://www.purebasic.fr/french/viewtopi ... 9&start=15

Djes , quoi de 9 avec pb3 ? :P
J'ai fini le boss, retravaillé pas mal de trucs, ajouté la gravité, nettoyage, un peu optimisé les credits que tu avais fait ;) ; y'a encore un peu de boulot, mais si je continue comme ça, ça devrait le faire pour le festival du jeu vidéo. Et toi, tu fais quoi de beau?
Anonyme

Message par Anonyme »

je bosse pas mal , je retape une ruine , entre deux, je code un peu avec Tmyke :D
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Message par djes »

Cpl.Bator a écrit :je bosse pas mal , je retape une ruine , entre deux, je code un peu avec Tmyke :D
C'est bien tout ça :) Ton travail c'est toujours taxi? J'ai en projet d'utiliser la lib de tmyke pour un vrai projet un de ces 4. Elle est où ta ruine?
beauregard
Messages : 1307
Inscription : dim. 08/juil./2007 18:32
Localisation : Toulouse

Message par beauregard »

djes a écrit :Un petit effet que j'avais fait pour le menu de purebreaker 3... le nouveau est mieux (merci pol ;))
http://djes.free.fr/purebasic/oldmenu.zip
sympa :)
Avec le curseur de la souris, ce qui serait sympa, c'est quand le joueur a la curiosité de le placer devant une lettre du titre, le P par exemple, et bien cette lettre s'agite ou changement d'echelle avec pourquoi pas un bruitage ou note, en veillant bien sûr qu'il ne massacre pas la musique ( en harmonie).

Ensuite, il y a le délicat problème de la colorisation dans vos production: au lieu de proposer un objet "tout rouge", mais y donc du blanc avec, afin de casser l'uniformité.
Quelques exemples:
blanc + rouge ; blanc + vert ; blanc + bleu
jaune + noir

et si possible, évitez tout ce qui est gris ou marron.

Et les décors doivent être moins lumineux que les objets, afin que les joueurs puissent parfaitement les distinguer sans difficulté.
Dernière modification par beauregard le sam. 28/juil./2007 15:55, modifié 1 fois.
beauregard
Messages : 1307
Inscription : dim. 08/juil./2007 18:32
Localisation : Toulouse

un jeu, un grand

Message par beauregard »

Cpl.Bator a écrit :Beauregard , tu veut de la 3D : :D
http://www.purebasic.fr/french/viewtopi ... 9&start=15
non, je ne compte pas me mettre à la vrai 3D, car j'ai déjà essayé avec 3dgc, et j'en est conclu que c'était encore trop tôt. Et puis, quand je vois le succès de jeu gameboy, certains à peine relifté avec le mot "new" placer devant le titre ( et se vendant comme des petits pains)... Je me suis dit que finalement, on pouvait faire des choses intéressantes en 2D.

Et c'est pourquoi je développe un jeu de plate-forme 2D, comme eric chahi ( seul dans ma chambre), sauf que manque de pot, je ne suis pas un surdoué. Alors ça me prendra encore beaucoup de temps pour le terminer... dans l'espoir par la suite que mon jeu soit suffisamment amusant, et fasse ainsi le tour du monde afin d'intéresser les sociétés ( droit console = plein de sous = faire ce que j'aime).
Anonyme

Message par Anonyme »

djes a écrit :
Cpl.Bator a écrit :je bosse pas mal , je retape une ruine , entre deux, je code un peu avec Tmyke :D
C'est bien tout ça :) Ton travail c'est toujours taxi? J'ai en projet d'utiliser la lib de tmyke pour un vrai projet un de ces 4. Elle est où ta ruine?
oui, j'ai eu l'examen , j'ai réussi à faire un crédit de 140.000e pour acheter une licence, mais le gars qui devait me la vendre à eu des problèmes, donc je poirote... j'vais p'tete faire flic en attendant :D
Sinon ma ruine est en haute normandie dans une p'tite ville médivale près du Havre, à Harfleur.
Répondre