Hey guys, I just have some questions about making a platformer using 3D assets.
Basically it's a clone of Super Mario World 1 - 1.
I've made all of the objects in 3DS Max and loaded them into Darkbasic (individual objects for special collision purpose), objects for the player, ground, question mark blocks, normal blocks, pipes and flagpole at the end. They're successfully all loaded in their respective positions in DarkBasic.
My Questions:
1. I can move the player left and right (only movement in this game, z axis is not a factor), there's no collision between him and the objects yet, but I'm wondering how can I make the camera stay fixed on the object as it moves?
2. How would I do something like a simple jump function for the player?
3. All of the question mark blocks are loaded in as one object, how would I make a collision only effect the one which is collided with?
Thanks for any help !
Whoops, forgot to put my code in thus far:
` Initial Setup
SYNC ON
SYNC RATE 60
` 2D Vector
TYPE Vect2
x AS FLOAT
y AS FLOAT
ENDTYPE
LOAD OBJECT "BackPlaneAndGround.X" , 1
LOAD OBJECT "PlayerModelStanding.X" , 2
LOAD OBJECT "PlayerModelRunning.X" , 3
LOAD OBJECT "QuestionMarkBlocks.X" , 4
LOAD OBJECT "NormalBlocks.X" , 5
LOAD OBJECT "NormalPipes.X" , 6
LOAD OBJECT "SpecialPipe.X" , 7
LOAD OBJECT "FlagPole.X" , 8
` Global Variable Definitions
` Delta Time
GLOBAL dt AS FLOAT
` Screen Dimensions
GLOBAL SCREEN_X AS FLOAT
GLOBAL SCREEN_Y AS FLOAT
SCREEN_X = SCREEN WIDTH()
SCREEN_X = SCREEN HEIGHT()
` Object Initialization
POSITION OBJECT 1 , 0 , 0 , 0
POSITION OBJECT 2 , 0 , 0 , 0
POSITION OBJECT 3 , OBJECT POSITION X(2) , OBJECT POSITION Y(2) , OBJECT POSITION Z(2)
HIDE OBJECT 3
POSITION OBJECT 4 , 0 , 0 , 0
POSITION OBJECT 5 , 0 , 0 , 0
POSITION OBJECT 6 , 0 , 0 , 0
COLOR OBJECT 6 , RGB(92 , 163 , 30)
POSITION OBJECT 7 , 0 , 0 , 0
POSITION OBJECT 8 , 0 , 0 , 0
` Camera Initialization
MAKE CAMERA 1
POSITION CAMERA 1 , OBJECT POSITION X(3) , OBJECT POSITION Y(3) , -50
POINT CAMERA 1 , 0 , 0 , 400
` Backdrop Initialization
COLOR BACKDROP 1 , RGB( 0 , 0 , 0 )
CamMoveSpeed as float
CamMoveSpeed = 100
ObjSpeed as float
ObjSpeed = 20
` Loop until the escape key is pressed
WHILE ESCAPEKEY() = 0
` Delta Time Update
IF SCREEN FPS() <> 0
dt = SCREEN FPS()
dt = 1.0 / dt
ELSE
dt = 0.016666
ENDIF
`OBJECT UPDATES
` MOVE PLAYER LEFT
IF LEFTKEY()=1
HIDE OBJECT 2
SHOW OBJECT 3
POSITION OBJECT 3 , OBJECT POSITION X(3) - ObjSpeed * dt , OBJECT POSITION Y(3) , OBJECT POSITION Z(3)
ENDIF
` PLAYER IN STANDING POSITION IF NOT MOVING
IF LEFTKEY() = 0 AND RIGHTKEY() = 0
HIDE OBJECT 3
SHOW OBJECT 2
POSITION OBJECT 2 , OBJECT POSITION X(3) , OBJECT POSITION Y(3) , 0
ENDIF
` MOVE PLAYER RIGHT
IF RIGHTKEY()=1
HIDE OBJECT 2
SHOW OBJECT 3
POSITION OBJECT 3 , OBJECT POSITION X(3) + ObjSpeed * dt , OBJECT POSITION Y(3) , OBJECT POSITION Z(3)
ENDIF
` PLAYER JUMP
IF UPKEY()=1 AND jumpLife=0
POSITION OBJECT 3 , OBJECT POSITION X(3) , OBJECT POSITION Y(3) + ObjSpeed * dt , OBJECT POSITION Z(3)
jumpLife = 10
SHOW OBJECT 3
ENDIF
IF jumpLife > 0
DEC laserLife
MOVE OBJECT 3 , 3
ENDIF
IF OBJECT IN SCREEN(1)
TEXT OBJECT SCREEN X(2) , OBJECT SCREEN Y(2) , "(" + STR$( OBJECT POSITION X(2)) + "," + STR$( OBJECT POSITION Y(2)) + "," + STR$( OBJECT POSITION Z(2)) + ")"
ENDIF
` Camera Position Update
` Move Camera Left
` A Key
IF GET KEY STATE( 0x41 ) < 0
POSITION CAMERA 1 , CAMERA POSITION X(1) - CamMoveSpeed * dt , CAMERA POSITION Y(1) , CAMERA POSITION Z(1)
ENDIF
` Move Object Right
` D Key
IF GET KEY STATE( 0x44 ) < 0
POSITION CAMERA 1 , CAMERA POSITION X(1) + CamMoveSpeed * dt , CAMERA POSITION Y(1) , CAMERA POSITION Z(1)
ENDIF
` Move Object Up
` W Key
IF GET KEY STATE( 0x57 ) < 0
POSITION CAMERA 1 , CAMERA POSITION X(1) , CAMERA POSITION Y(1) + CamMoveSpeed * dt , CAMERA POSITION Z(1)
ENDIF
` Move Object Down
` S Key
IF GET KEY STATE( 0x53 ) < 0
POSITION CAMERA 1 , CAMERA POSITION X(1) , CAMERA POSITION Y(1) - CamMoveSpeed * dt , CAMERA POSITION Z(1)
ENDIF
` Update Screen
SYNC
ENDWHILE
EXIT
Mind the jump life thing, I'm was just seeing if I could get jumping working that way.