je code mais je ne raisonne pas en 3D. par exemple, je me réfère a un tableau pour afficher des pièces déjà pausées.
Pourriez-vous m'indiquer quelle instruction permet de "lier" 4 carrés pour former une pièce de Tétris, une instruction pour la gravité et une instruction pour killer une caisse ?
Code : Tout sélectionner
EnableExplicit
Define Dim camera(2000),Dim light(2000),Dim mesh(2000),Dim material(2000),Dim entity(2000)
; Define camera, light, mesh, material, entity
; Define camera2, light2, mesh2, material2, entity2
Define xx.f, yy.f, zz.f, xx2.f, yy2.f, zz2.f
; Define Dim create.l(100)
Define i.l,u.l,n.l,x.l,y.l,taille_x,taille_y,piece
Define b.b
Declare CreateSquare(Mesh, Size.f)
ExamineDesktops()
InitEngine3D(#PB_Engine3D_DebugLog) : InitSprite() : InitKeyboard() : InitMouse()
OpenScreen(DesktopWidth(0), DesktopHeight(0), 32, "3D de base")
Add3DArchive(#PB_Compiler_Home + "examples\3D\Data\Textures", #PB_3DArchive_FileSystem)
; Camera
camera(0) = CreateCamera(#PB_Any, 0, 0, 100, 100)
MoveCamera(camera(0), 8, 6, 30)
CameraLookAt(camera(0), 0, 0, 0)
RotateCamera(camera(0), 0 ,0 ,180)
; Si pas de ciel, couleur de fond
CameraBackColor(camera(0), RGB(184, 134, 11))
; Lumiere
light(0) = CreateLight(#PB_Any, RGB(255, 255, 255), -100, 100, 0)
; Création du premier cube
taille_x=16
taille_y=12
Dim tableau.b(taille_x,taille_y)
i=0
For y=0 To taille_y
For x=0 To taille_x
If y>taille_y/2; Or y=0
If Random(1)=0
tableau(x,y)=1
mesh(i) = CreateCube(#PB_Any, 1)
material(i) = CreateMaterial(#PB_Any, TextureID(LoadTexture(#PB_Any, "caisse.png")))
entity(i) = CreateEntity(#PB_Any, MeshID(mesh(i)), MaterialID(material(i)))
; On redimentionne le cube.
ScaleEntity(entity(i), 1, 1, 0.1)
MoveEntity(entity(i), x, y, 0)
i+1
EndIf
EndIf
Next
Next
Dim piece.b(27,3,3) ; toutes les pieces de tetris dans ce dim piece()
For n=0 To 6
For y=0 To 3
For x=0 To 3
Read.b piece(n,x,y)
piece(n+7,3-y,x)=piece(n,x,y)
piece(n+14,3-x,3-y)=piece(n,x,y)
piece(n+21,y,3-x)=piece(n,x,y)
Next
Next
Next
;Goto ok
u=24
i=0
For piece=1 To 27 Step 3
;piece=2+7+7+7
For y=0 To 3
For x=0 To 3
If piece(piece,x,y)=1
mesh(i+900) = CreateCube(#PB_Any, 1)
material(i+900) = CreateMaterial(#PB_Any, TextureID(LoadTexture(#PB_Any, "caisse.png")))
entity(i+900) = CreateEntity(#PB_Any, MeshID(mesh(i+900)), MaterialID(material(i+900)))
; On redimentionne le cube.
ScaleEntity(entity(i+900), 1, 1, 0.1)
MoveEntity(entity(i+900), x+u, y, 0)
EndIf
i+1
Next
Next
u-4
Next
;
ok:
; Boucle 3D
xx=0.125
Repeat
ExamineKeyboard()
ExamineMouse()
If KeyboardPushed(#PB_Key_Up) ; Appuyez sur la touche [Echap] pour quitter
EndIf
If KeyboardPushed(#PB_Key_Down) ; Appuyez sur la touche [Echap] pour quitter
EndIf
For y=0 To taille_y
i=0
For x=0 To taille_x
i+tableau(x,y)
Next
If i=taille_x
; supprimer cette ligne remplie
Beep_(500,100)
For u=y To 1 Step -1
For i=0 To taille_x
tableau(i,u-i)=tableau(i,u)
Next
Next
EndIf
Next
;MoveEntity(entity(1), xx, 0, 0)
RenderWorld()
FlipBuffers()
Until KeyboardReleased(#PB_Key_Escape) Or MouseButton(#PB_MouseButton_Middle)
End
;{
DataSection
Data.b 0,0,0,0
Data.b 0,1,1,0
Data.b 0,1,1,0
Data.b 0,0,0,0
;;;
Data.b 0,0,0,0
Data.b 0,0,0,0
Data.b 1,1,1,1
Data.b 0,0,0,0
;;;
Data.b 0,0,0,0
Data.b 0,0,1,0
Data.b 1,1,1,0
Data.b 0,0,0,0
;;;
Data.b 0,0,0,0
Data.b 1,0,0,0
Data.b 1,1,1,0
Data.b 0,0,0,0
;;;
Data.b 0,0,0,0
Data.b 0,1,0,0
Data.b 1,1,1,0
Data.b 0,0,0,0
;;;
Data.b 0,0,0,0
Data.b 1,1,0,0
Data.b 0,1,1,0
Data.b 0,0,0,0
;;;
Data.b 0,0,0,0
Data.b 0,1,1,0
Data.b 1,1,0,0
Data.b 0,0,0,0
;;;
EndDataSection
;}