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 ?
Bild

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" :roll: 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 !!! :allright:

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