Seite 1 von 4
First Person Shoter Frage
Verfasst: 25.07.2008 01:05
von kob
Hallo ich möchte einen FPS Schreiben bin auch schon weit , nur bei der entscheidenen frage gibt es ein problem . ich habe mir im internet ein beispiel angesehen , das erleutern soll , wie man eine kugel in die richtung "fliegen" lassenkann , in die die kammera greade schaut , problem bei mir funktionirt das nicht hat jemand eine antwort für micht ? ober sogar ein paar proceduren ? das währe nett Thanks
Verfasst: 25.07.2008 08:38
von ZeHa
Zeig uns das Beispiel doch mal und erkläre uns, warum das bei Dir nicht funktioniert bzw. wie das bei Dir dann abläuft.
Verfasst: 25.07.2008 10:02
von Vermilion
Also auf Anhieb würde ich nun auf Vektorrechnung oder Trigonometrie zurückgreifen, falls sich das nicht mit integriertem Funktionen der Engine bewerkstelligen lässt.
Verfasst: 25.07.2008 10:08
von Fluid Byte
problem bei mir funktionirt das nicht hat jemand eine antwort für micht ?

Ok
Verfasst: 25.07.2008 10:48
von kob
Ich kann ja mal die proceduren rinstellen , sind aber etwas groß und undurchsichtig , ist neues land für mich sowas , nicht 3D algemein , nur das mir der kamera also hier die proceduren :
Code: Alles auswählen
Structure Shot
ID.l
EntityID.l
X.f
Y.f
Z.f
MoveX.f
MoveY.f
MoveZ.f
Speed.f
Damage.l
EndStructure
Global PiOver180 = (ATan(1)*4)/180
Global NewList Shot.Shot()
Procedure AndY_AddShot(ID,Entity,x,y,z,MoveX.f,MoveY.f,MoveZ.f,Speed)
AddElement(Shot())
Shot()\ID = ID
Shot()\EntityID = Entity
Shot()\X = X
Shot()\Y = Y
Shot()\Z = Z
Shot()\MoveX = MoveX
Shot()\MoveY = MoveY
Shot()\MoveZ = MoveZ
Shot()\Speed = Speed
EndProcedure
Procedure AndY_ExamineShot()
If CountList(Shot()) => 1
ForEach Shot()
Shot()\X + ( Shot()\MoveX * 3 )
Shot()\Y + ( Shot()\MoveY * 3 )
Shot()\Z + ( Shot()\MoveZ * 3 )
EntityLocate(Shot()\EntityID,Shot()\X,Shot()\Y,Shot()\Z)
Next
EndIf
EndProcedure
Procedure AndY_DeleteShot(ID)
If CountList(Shot()) => 1
ForEach Shot()
If Shot()\ID = ID
DeleteElement(Shot())
EndIf
Next
EndIf
EndProcedure
und in der Main :
Code: Alles auswählen
InitAndYEngine()
AndY_Con_Init()
CreateCamera(1,0,0,100,100)
CameraLocate(1,1000,0,0)
CameraLookAt(1,0,0,0)
Repeat
ClearScreen(#Black)
ExamineMouse()
ExamineKeyboard()
AndY_ExamineJump()
AndY_ExamineShot()
If KeyboardReleased(#PB_Key_Add)
AndY_SetHUDSprite(#Sprite_HUD_ScopeM4A1)
ElseIf KeyboardReleased(#PB_Key_Subtract)
AndY_SetHUDSprite(#Sprite_HUD_ScopeNorm)
EndIf
If KeyboardPushed(#PB_Key_W)
CameraMoveZ = -#CameraSpeed
ElseIf KeyboardPushed(#PB_Key_S)
CameraMoveZ = #CameraSpeed
Else
CameraMoveZ = 0
EndIf
If KeyboardPushed(#PB_Key_A)
CameraMoveX = -#CameraSpeed
ElseIf KeyboardPushed(#PB_Key_D)
CameraMoveX = #CameraSpeed
Else
CameraMoveX = 0
EndIf
If KeyboardPushed(#PB_Key_LeftControl)
PlayerHeight = 150
Else
PlayerHeight = 270
EndIf
If KeyboardReleased(#PB_Key_Space)
AndY_Jump(230,10)
EndIf
If MouseButton(#PB_MouseButton_Left) = 1
BewegX.f = -Sin(CamrotY*piover180)
BewegY.f = Sin(CamrotX*piover180)
BewegZ.f = -Cos(CamrotY*piover180)
AndY_Con_DebugText(Str(BewegX))
AndY_Con_DebugText(Str(BewegY))
AndY_Con_DebugText(Str(BewegZ))
AndY_AddShot(1,#SR71_Shell,CameraX(1),CameraY(1),CameraZ(1),BewegX.f,BewegY.f,BewegZ.f,2)
EndIf
MouseX = -MouseDeltaX()/10
MouseY = -MouseDeltaY()/10
camrotx + Mousey
camroty + Mousex
If camrotx > 360 : camrotx - 360 : EndIf
If camroty > 360 : camroty - 360 : EndIf
If camrotx < 0 : camrotx + 360 : EndIf
If camroty < 0 : camroty + 360 : EndIf
CameraLocate(1,CameraX(1),PlayerY+PlayerHeight,CameraZ(1))
MoveCamera(1,CameraMoveX,0,CameraMoveZ)
RotateCamera(1,MouseX,MouseY,RollZ)
RenderWorld()
AndY_DrawHUD()
AndY_Con_DrawBack()
StartDrawing(ScreenOutput())
DrawingMode(#PB_2DDrawing_Transparent)
DrawText(10,10,Str(Engine3DFrameRate(#PB_Engine3D_Current)),RGB(255,255,255))
DrawText(10,25,Str(CountRenderedTriangles()),RGB(255,255,255))
DrawText(10,50,Str(camrotx),#White)
DrawText(10,75,Str(camroty),#White)
AndY_Con_DrawConsole()
StopDrawing()
FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape)
End
Ja ich weis . das mit AndY_ ist meine engine heisst so , danke für die schnelle hilfe weiter so .
Verfasst: 25.07.2008 11:36
von Fluid Byte
Hast du auch etwas was ausführbar ist? Du solltest versuchen das Problem auf den Kern zu reduzieren.
Klar
Verfasst: 25.07.2008 11:53
von kob
Klar habe ich was ausfürbares , das sind nur 35MB , mit den sorces , daten , texturen und so , kann ich ja man irgendwie hochladen . Lade es bei rapideshare hoch , send dan den link , bitte die daten vertraulich behandel , und nicht verändern , sind auserdem ein paar "geklaute"

meshes drin , ein bin ich greade am modeln .
Verfasst: 25.07.2008 12:00
von Kaeru Gaman
also ganz grundsätzlich musst du einen 3D-Vektor berechnen, in dessen Richtung die Cam zeigt.
dieser Vektor auf eine Grundlänge reduziert ist dann der bewegungsvektor für deine Geschosse.
ein problem was ich bei dir sehe ist, dass du eine gewisse camrotx/y berechnest,
aber die camera nach MouseX/Y rotierst.
aber ganz grundsätzlich ist es wirklich hilfreich, wenn du einen ausführbaren code postest.
das bedeutet nicht, dass du dein ganzes projekt posten sollst,
sondern nur ein bisschen extra-code, der demonstriert wo das problem liegt.
und natürlich auch eine ausführliche erklärung, also mehr als drei sätze.
die 35MB werde ich nicht runterladen, um mich durch tonnen fremden code zu kämpfen.
investiere doch bitte etwas zeit und schreibe ein beispiel, das das problem zeigt.
sorry, aber wenn man ein komplexes problem hat, muss man sich
nunmal etwas mühe geben das darzulegen, wenn man hilfe braucht.
Is Oben
Verfasst: 25.07.2008 12:03
von kob
Hier ist der link :
http://rapidshare.de/files/40077622/SHOTER.zip.html
bitte vertraulich behandel , und bitte beeilt euch danke !!!

Ok'e werde ich mal machen
Verfasst: 25.07.2008 12:06
von kob
danke für die antwort , habe sie leiber erst gelesen als ich das archiv schon hochgeladen hatte , werde jetzt ein beispiel schreiben , lasse den link aber aktiv