A couple of beginner questions...
Blitz3D Forums/Blitz3D Beginners Area/A couple of beginner questions...
| ||
| Hi guys! I'm a new user of Blitz3D, I'm currently reading through the command reference and trying to get an understanding of the language. I have never written anything in 3D before (I've only recently started learning 3D math from a book) and haven't written any games since the days of AMOS on the Amiga. Anyway, I have a couple of questions: 1) I get the impression that all arrays are global. Is this correct, or can I declare an array in a local scope? 2) MoveEntity vs. TranslateEntity. From what I can gather, MoveEntity takes its coordinates from the entity's space, where TranslateEntity uses worldspace coordinates? Sorry for such dumb questions, but I have limited time at the moment, and thus I can either read documentation or code, not enough time for both just yet :-( |
| ||
Hey stevious! you can declare a local array like this:MyArray[10] cool trick, that :) MoveEntity moves the entity in a certain direction depending on which way it's facing, and I don't use TranslateEntity much, but from what I can gather, it does move an entity based on world coordinates. Hope that helps! |
| ||
| Yes all arrays are globals (note i use types-see expl below) Yes moveentity moves the entity whichever way its facing. And translateentity moves the entity to world coords. This is how I do my 3d code. I use everything as a type. Try This to store your mesh info. ;first define the type and approx fields type player field model field x field y field z field rot ;then to create a new player p.player=new player p\model=copyentity(player_entity) ;assuming you have a model p\x#=0; or whever the models starting p\y#=0 p\z#=0 p\rot=0 ;starts off facing its normal position Heres a quick little program defining collisions, mesh/model movement, keyboard controls, and bullet firing. Create image/image buffer, rotation controls, adding meshes manually, etc. I think this code is pretty well documented and easy to follow, good luck
;note i didn't use p.player in this code
Graphics3D 400,300,16,3 ;change to 1 for faster
SetBuffer BackBuffer()
;Set Collision Types as Constants
Const Type_player=1
Const Type_wall=2
light=CreateLight()
RotateEntity light,90,0,0;rotate the light, puts the light at 0,0,0 and makes stuff visible
;Create Base Bullet model and resizes it
bullx=CreateSphere()
ScaleEntity bullx,.5,.5,.5
HideEntity bullx ;hides it, this one will not be seen
;create player fighter
model=CreateCube()
EntityType model,1
EntityRadius model,1.25
PositionEntity model,40,1,5
cam=CreateCamera()
PositionEntity cam,40,3,1
;attach the camera pivot
pivot=CreatePivot()
EntityParent pivot,model
EntityParent cam,model
;create a generic checkboard texture used on walls and floor both=need some color
tex=CreateTexture( 256,256 )
;set the texturebuffer to draw on such texture and makes a checkerboard type look
SetBuffer TextureBuffer( tex )
Color 255,0,0
For x=0 To 256 Step 32
For y=0 To 256 Step 32
Rect x,y,16,16
Next
Next
;reset buffer
SetBuffer BackBuffer()
Cls
;create the floor by addingvertexes etc manually
Arena=CreateMesh()
Afloor=CreateSurface(Arena)
v1=AddVertex (afloor,0,0,100,0,1)
v2=AddVertex (afloor,100,0,100,1,1)
v3=AddVertex (afloor,100,0,0,1,0)
v4=AddVertex (afloor,0,0,0,0,0)
tri=AddTriangle(afloor,v1,v2,v3)
tri2=AddTriangle(afloor,v1,v3,v4)
EntityTexture arena,tex
EntityRadius arena,1
EntityType arena,Type_floor
;and the four sequential walls
nwall=CreateMesh()
nFloor=CreateSurface(nwall)
v1=AddVertex (nFloor,0,10,0,0,1)
v2=AddVertex (nFloor,0,10,100,1,1)
v3=AddVertex (nFloor,0,0,100,1,0)
v4=AddVertex (nFloor,0,0,0,0,0)
tri=AddTriangle(nFloor,v1,v2,v3)
tri2=AddTriangle(nFloor,v1,v3,v4)
afloor=LoadTexture("c:\blitz\checker2.bmp")
EntityTexture nwall,tex
EntityRadius nwall,1
EntityType nwall,2
UpdateNormals(nwall)
swall=CreateMesh()
sFloor=CreateSurface(swall)
v1=AddVertex (sfloor,100,10,100,0,1)
v2=AddVertex (sfloor,100,10,0,1,1)
v3=AddVertex (sfloor,100,0,0,1,0)
v4=AddVertex (sfloor,100,0,100,0,0)
tri=AddTriangle(sfloor,v1,v2,v3)
tri2=AddTriangle(sfloor,v1,v3,v4)
EntityTexture swall,tex
EntityRadius swall,1
EntityType swall,2
UpdateNormals(swall)
wwall=CreateMesh()
wfloor=CreateSurface(wwall)
v1=AddVertex (wfloor,0,10,100,0,1)
v2=AddVertex (wfloor,100,10,100,1,1)
v3=AddVertex (wfloor,100,0,100,1,0)
v4=AddVertex (wfloor,0,0,100,0,0)
tri=AddTriangle(wfloor,v1,v2,v3)
tri2=AddTriangle(wfloor,v1,v3,v4)
EntityTexture wwall,tex
EntityRadius wwall,1
EntityType wwall,2
UpdateNormals(wwall)
ewall=CreateMesh()
efloor=CreateSurface(ewall)
v1=AddVertex (efloor,100,10,0,0,1)
v2=AddVertex (efloor,0,10,0,1,1)
v3=AddVertex (efloor,0,0,0,1,0)
v4=AddVertex (efloor,100,0,0,0,0)
tri=AddTriangle(efloor,v1,v2,v3)
tri2=AddTriangle(efloor,v1,v3,v4)
EntityTexture ewall,tex
EntityRadius ewall,1
EntityType ewall,2
;update the rest of the normals for light,etc
UpdateNormals(ewall)
UpdateNormals(arena)
UpdateNormals(model)
;enable collisions between player and wall
;note since the player model is moving, if you did collisions 2,1,2,2 it wouldn't work
Collisions 1,2,2,2
While Not KeyHit(1)
;Check NewFire
If KeyDown(57)=True Then ;change If keydown(57) to If keyhit(57) for noncontinous firing
;if fired Create a new bullet and position it at players location
b.bullet=New bullet
b\model=CopyEntity(bullx)
ax#=EntityX(model)
ay#=EntityY(model)
az#=EntityZ(model)
PositionEntity b\model,ax#,ay#,az#
TurnEntity b\model,0,rot#,0
MoveEntity b\model,0,0,3
b\dur=50
;after dur is over, bullet disappears
EndIf
;Read KeyCommands
;if keyhit(205)=true then ;exchange this and next line, keydown will fire almost constatly
If KeyDown( 205 )=True Then
rot#=rot#-5
TurnEntity model,0,-5,0 ;next line stores rotation of player model
If rot#<0 Then rot#=Rot#+360
EndIf
If KeyDown( 203 )=True Then
rot#=rot#+5
TurnEntity model,0,5,0
If rot#>360 Then rot#=rot#-360
EndIf
If KeyDown( 208 )=True Then MoveEntity model,0,0,-1
If KeyDown( 200 )=True Then MoveEntity model,0,0,1
;Update Each Bullet
For b.bullet=Each bullet
MoveEntity b\model,0,0,3
b\dur=b\dur-1
If b\dur<0 Then
FreeEntity b\model
Delete b ;deletes b.bullet all fields
EndIf
Next
;check collisions
UpdateWorld
;show the world as it is now
RenderWorld
;I never Did Add life!
Text 10,10,"Life: "+life
Flip
Wend
ClearWorld()
End
Type bullet
Field model
Field dur ;if dur ends bullet disapppears
End Type
end type
|
| ||
| Great, thanks for the replies! I've spent my last 5 years coding for the corporate world (and 5 years prior to that fixing computers...), it's time to shake off the dust and cobwebs and see if I can remember how to code for fun :-) |
| ||
| translate entity moves an entity regardless of it's orientation: rotateentity blob,0,90,0 moveentity blob,0,0,1 will move an entity 1 in the x direction because you have pointed it to the right. rotateentity blob,0,90,0 translateentity blob,0,0,1 will move the entity 1 in the z direction regardless of the orientation. |