Problem mit LinePick
Übersicht

smeagle24Betreff: Problem mit LinePick |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo, ich schreinbe gerade einen kleinen EGO-Shoter. Nun will ich mit dem Befehl LinePick überprüfen, das wenn eine Waffe abgefeuert wird, ob man den Gegner getroffen hat oder nicht. Ich habe das mal so versucht zu lösen:
Code: [AUSKLAPPEN] Graphics3D 1024,768,32,1
SetBuffer BackBuffer() timer=CreateTimer(90) AmbientLight 180, 175, 170 Global cam_pivot=CreatePivot() Global main_cam=CreateCamera() CameraViewport main_cam,0,0,1024,768 CameraClsColor main_cam,190,185,180 CameraFogColor main_cam,180,175,170 main_light=CreateLight(2,main_cam) PositionEntity main_cam,0,20,-1 LightRange main_light,50 EntityType main_cam,1 EntityRadius main_cam,17 EntityRadius cam_pivot,17 Global leben=100 gegner=LoadMesh("android.b3d") ScaleEntity gegner,.8,.8,.8 RotateEntity gegner, 0,180,0 PositionEntity gegner,0,0,100 EntityRadius gegner,3,3 EntityPickMode gegner,1 pistole=LoadMesh("revolver.b3d") PositionEntity pistole,-.7,8,15 ScaleEntity pistole,0.08,0.08,0.08 EntityParent pistole, main_cam ShowEntity pistole EntityShininess pistole,1 MoveMouse 320,240 While Not KeyHit(1) HidePointer Cls TurnEntity cam_pivot,0,0 -MouseXSpeed(),0 TurnEntity main_cam, MouseYSpeed(),0,0 RotateEntity cam_pivot, EntityPitch#(cam_pivot), EntityYaw#(cam_pivot),0 RotateEntity main_cam, EntityPitch#(main_cam), EntityYaw#(cam_pivot),0 If KeyDown(31) Then MoveEntity cam_pivot, 0, 0, -2 If KeyDown(17) Then MoveEntity cam_pivot, 0, 0,2 If KeyDown(32) Then MoveEntity cam_pivot, 2, 0, 0 If KeyDown(30) Then MoveEntity cam_pivot, -2,0, 0 PositionEntity main_cam, EntityX#(cam_pivot), EntityY#(cam_pivot), EntityZ#(cam_pivot) PositionEntity cam_pivot, EntityX#(main_cam), EntityY#(main_cam), EntityZ#(main_cam) If MouseHit(1) treffer=LinePick(EntityX(main_cam),EntityY(main_cam),EntityZ(main_cam),0,0,100,2) If treffer>0 leben=leben-2 EndIf If leben<=0 HideEntity gegner EndIf EndIf MoveMouse 290,MouseY() UpdateWorld() RenderWorld() Text 100,50,leben WaitTimer timer Flip Wend End Nur habe ich das Problem, das dem Gegner bei jeden Schuss Leben abgezogen wird, ob ich in nun treffe oder daneben schiesse. Kann mir vielleicht jemand sagen, was ich hier falsch gemacht habe? |
||
da_poller |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
du erhältst kein true oder false wie du vermutest zurück sondern das handle des ersten getroffenen objektes.
linepick ![]() hoffe ich als 3d nichts wisser konnte helfen. |
||
smeagle24 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Das mit dem Rückgabewert ist mir klar.
Nur mein Problem ist, der Startpunkt des LinePick ist die Camera. Aber wie kann ich dann den Mesh "Treffen" wenn ich in den Rücken zukehre? |
||
da_poller |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Code: [AUSKLAPPEN] If treffer>0
leben=leben-2 EndIf hier liegt das problem.. treffer enthält die ID des getroffenen gegenstandes der egal wo du hinschießt eig immer über 0 ist(wand boden etc...) du musst treffer und die id des mesh des gegners vergleichen ist die gleich triffst du.. |
||
smeagle24 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Wenn ich dich richtig verstehe meinst du, das ich meinen Code etwa so umändern sollte
Code: [AUSKLAPPEN] If treffer=gegner
leben=leben-2 EndIf Denn falls du dass meinst, das funktioniert auch nicht. Oder ich sitzt total auf der Leitung und verstehe dich einfach nicht. |
||
da_poller |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
also der MESH oder das entity(ka bin 3d noob) haben eine id(denke die vom mesh musst du verwenden)
und wenn die id die linepick hergibt = der id des meshes ist dann ist ein treffer vorhanden. |
||
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Für Sachen, wo ein Entity bereits die Richtung vorgibt, kann man auch EntityPick![]() Code: [AUSKLAPPEN] Graphics3D 1024,768,0,2
SetBuffer BackBuffer() timer=CreateTimer(90) AmbientLight 180, 175, 170 Global cam_pivot=CreatePivot() Global main_cam=CreateCamera() CameraViewport main_cam,0,0,1024,768 CameraClsColor main_cam,190,185,180 CameraFogColor main_cam,180,175,170 main_light=CreateLight(2,main_cam) ;PositionEntity main_cam,0,20,-1 LightRange main_light,50 EntityType main_cam,1 EntityRadius main_cam,17 EntityRadius cam_pivot,17 Global leben=100 gegner=CreateCube();LoadMesh("android.b3d") EntityColor gegner,255,0,0 ScaleEntity gegner,.8,.8,.8 ;RotateEntity gegner, 0,180,0 PositionEntity gegner,0,0,100 EntityRadius gegner,3,3 EntityPickMode gegner,1 pistole=CreateCube();LoadMesh("revolver.b3d") ;PositionEntity pistole,-.7,8,15 PositionEntity pistole,0,0,3 ScaleEntity pistole,0.08,0.08,0.08 EntityParent pistole, main_cam ShowEntity pistole EntityShininess pistole,1 MoveMouse 320,240 While Not KeyHit(1) HidePointer Cls TurnEntity cam_pivot,0,0 -MouseXSpeed(),0 TurnEntity main_cam, MouseYSpeed(),0,0 RotateEntity cam_pivot, EntityPitch#(cam_pivot), EntityYaw#(cam_pivot),0 RotateEntity main_cam, EntityPitch#(main_cam), EntityYaw#(cam_pivot),0 If KeyDown(31) Then MoveEntity cam_pivot, 0, 0, -2 If KeyDown(17) Then MoveEntity cam_pivot, 0, 0,2 If KeyDown(32) Then MoveEntity cam_pivot, 2, 0, 0 If KeyDown(30) Then MoveEntity cam_pivot, -2,0, 0 PositionEntity main_cam, EntityX#(cam_pivot), EntityY#(cam_pivot), EntityZ#(cam_pivot) PositionEntity cam_pivot, EntityX#(main_cam), EntityY#(main_cam), EntityZ#(main_cam) If MouseHit(1) ; treffer=LinePick(EntityX(main_cam),EntityY(main_cam),EntityZ(main_cam),0,0,100,2) treffer=EntityPick(pistole,1000) If treffer<>0 leben=leben-2 EndIf If leben<=0 ; HideEntity gegner EndIf EndIf MoveMouse 512,384 UpdateWorld() RenderWorld() Text 100,50,leben WaitTimer timer Flip Wend End Statt If treffer>0 würde ich auf jeden Fall If treffer<>0 machen, da eine Integer unter Blitz3D signed ist und somit auch negative Werte beinhalten kann. |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
smeagle24 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Habe meinen Code entsprechend deines Vorschlages von linepick auf entitypick umgeändert und jetzt funktioniert das ganze genau so wie ich es haben will.
Vielen Dank für eure schnelle Hilfe. |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group