Most of what I know I learned from Wolron and Rob but here is some messy simple code. Bullet and cylinder... shoot the bullet and hit the cylinder and the bullet disappears... you could rework it and make the can dissappear but I didn't feel like re coding.
-RZ
; ########################################### THIS CODE IS NOT INDENTED AND IS VERY HARD TO READ ; VERY MESSY. Graphics3D 640,480,16,0 SetBuffer BackBuffer() light=CreateLight(1) AmbientLight 60, 60, 50 HidePointer Global set = 0 h=CreatePivot() PositionEntity h,20,2,40 Global power=1 Global gun_timer=MilliSecs() ; timer to track the difference in millisecs Global gun_time=450 ; time in milliseconds that the gun will fire ; lower numbers make the gun spit bullets like a firehose... try 250 Global ammo Global score ; ################################################ CHANGED THIS FOR MORE FREE FIRE Type bullet ; CREATE a type called bullet Field entity ; gives us a bulet name Field speed# ; How FAST it will go Field range ; How long to keep it on the screen Field pivot ; An AID to AIMING End Type ; ; We don't actually fill this TYPE in yet since we are going to create ; bullets "on the fly" so to speak (as we need them.) ; We could ALSO do the same thing for our targets so we could reposition ; them later and make this a real (simple) game. ; aim=LoadImage("aimpoint2.png") ; you are going to need a PNG for this to work 32X32 Black Back and Yellow Cross is simple enough aimer=CreateCamera() PositionEntity aimer,20,2,20 Global bullet=CreateSphere(32) EntityType bullet,1 PositionEntity bullet,20,2,20 EntityColor bullet,222,255,222 ScaleEntity bullet,Rand(1,2),Rand(1,2),Rand(1,2) plane=CreatePlane(2) EntityColor plane,0,0,255 EntityShininess plane,62 EntityType plane,1 bottle=CreateCylinder(40) PositionEntity bottle,20,0,50 ScaleEntity bottle,1,2,1 EntityRadius bottle, 2 EntityType bottle, 1 turn = 1 ; make the cylinder rotate ; ######################### SET COLLISIONS SO WE CAN SEE IF WE HIT Collisions 1,2,2,1 Collisions 2,1,2,1 ammo = 20 ; number of bullets While Not KeyDown(1) update_bullet() check_collide() If MilliSecs()>gun_time+gun_timer Then ShowEntity bullet If MilliSecs()<gun_time+gun_timer Then HideEntity bullet ; ########################### TO KEEP THE BOTTLE TURNING ONE DIRECTION If turn = 1 Then turning = 1 tilt = tilt - 1 If tilt >= 370 turn = 2 EndIf EndIf If turn = 2 Then turning = -1 tilt = tilt - 1 If tilt <= 350 turn = 1 EndIf EndIf If turn =1 = True Then TurnEntity bottle,0,0,turning If turn =2 = True Then TurnEntity bottle,0,0,turning ; ############################# I DIDN'T WRITE THIS PART... WORKS THOUGH mxs#=MouseXSpeed()/4 ; used to get mouse movement and thus AIM mys#=MouseYSpeed()/4 xa#=(xa#-mxs#)Mod 360 ya#=(ya#+mys#)Mod 360 MoveMouse GraphicsWidth()/2,GraphicsHeight()/2 RotateEntity aimer,ya#,xa#,0 If KeyDown( 201 )=True Then power=power+1 ; PAGE UP power up FASTER bullets If KeyDown( 209 )=True Then power=power-1 ; PAGE DOWN power down SLOWER bullets If power <= 1 Then power = 1 EndIf If power >= 12 Then power = 12 EndIf If KeyHit(57) = True Then ; SPACEBAR to fire gun_timer=MilliSecs() ; reset the bullet timer create_bullet(aimer) ; call function to create a bullet. Pass across the aimer entity to the function ; so the bullet can come from the guns position EndIf UpdateWorld() RenderWorld() DrawImage aim,297,227 Rect 70,15,powerful,5 Text 10,10,"Power:" Text 10,30,"Energy: " + power Text 10,70,"Rocks Left: " + ammo Text 10,90,"SCORE: "+score check_collide() Flip Wend End ; ################################# FUNCTIONS Function create_bullet(gun_entity) ; this creates a bullet at the aimer If ammo = 0 Then Return ; no bullets go away! ammo = ammo - 1 HideEntity bullet ; hide old entity b.bullet=New bullet ; make a new bullet entity temp_x=EntityX(gun_entity,True) temp_y=EntityY(gun_entity,True) temp_z=EntityZ(gun_entity,True) b\entity=CopyEntity(bullet) b\pivot=CreatePivot() PositionEntity b\entity,temp_x,temp_y,temp_z EntityType b\entity,2 RotateEntity b\entity,EntityPitch(gun_entity,True),EntityYaw(gun_entity,True),0 PositionEntity b\pivot,temp_x,temp_y,temp_z b\range = 250 ; set bullet range so it does not clutter the screen (I used power but usually set it at 200 - 300 b\speed = power ; set initial bullet speed End Function Function update_bullet() For b.bullet = Each bullet ; move every bullet fired MoveEntity b\entity,0,0,b\speed If EntityDistance#(b\entity,b\pivot) > b\range Then FreeEntity b\entity FreeEntity b\pivot Delete b.bullet End If Next End Function Function check_collide() For b.bullet = Each bullet If EntityCollided(b\entity,1) Then ;since our bottle is a 1 HideEntity b\entity score = score +10 FreeEntity b\entity FreeEntity b\pivot Delete b.bullet EndIf Next ; this function could be reversed to hide the bottle and place a new bottle in a new location ; simply by a small change of code... End FunctionIt is simple code. Not too messy but hacked from other programs so I apologize in advance.
-RZ