Page 1 sur 4

Comme les sprite3Ds sont à la mode...

Publié : jeu. 26/juil./2007 22:40
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.

Publié : jeu. 26/juil./2007 23:51
par Backup
c'est tres joli ! :D
on dirai un effet phong ! :D

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

Publié : ven. 27/juil./2007 7:22
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 ?

Publié : ven. 27/juil./2007 8:19
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....

Publié : ven. 27/juil./2007 11:09
par Polux
Très astucieux et zoli en plus! Bravo :wink:

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

Publié : ven. 27/juil./2007 23:46
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

Publié : sam. 28/juil./2007 1:54
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

Publié : sam. 28/juil./2007 8:42
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

Publié : sam. 28/juil./2007 10:18
par Crystal Noir
En tout cas c'est bien sympa tout ca.

Publié : sam. 28/juil./2007 10:56
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?

Publié : sam. 28/juil./2007 11:56
par Anonyme
je bosse pas mal , je retape une ruine , entre deux, je code un peu avec Tmyke :D

Publié : sam. 28/juil./2007 12:16
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?

Publié : sam. 28/juil./2007 15:31
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é.

un jeu, un grand

Publié : sam. 28/juil./2007 15:49
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).

Publié : sam. 28/juil./2007 19:04
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.