Schüsse fliegen falsch
Übersicht

mevsmpBetreff: Schüsse fliegen falsch |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
HI,
Ich hab ein Problem mit einem Code den ich in meinen eingebaut hab. Mit hilfe dieses Codes den ich von hier habe sollte ich schiessen können. Funktioniert eigendlich auch biss auf zwei Fehler: 1. Das Geschoss fliegt in die Falsche Richtung^^. Aber das kann ich doch eigendlich einfach beheben in dem ich die MoveEntity Geschwindigkeit auf - setze. oder? 2. Ich versteh nicht warum aber die Kugeln fliegen fast immer woanders hin als sie sollten. Meistens fliegen sie ungefähr dahin wo sie hinsollen. Aber eben nur ungefähr... Oft fliegen sie ganz falsch^^. Ich hab den Code so eingestellt dass die Position von meinem Md2 (dragon) genommen wird und von dort dann eigendlich abgefeuert werden sollte. Guckt euch den Abschnitt bei " If MouseHit(1)" mal bitte an. Ich denke dort steckt irgendwo der Fehler... Code: [AUSKLAPPEN] Include "../start.bb" SeedRnd MilliSecs() ;SetFont(LoadFont("Comic Sans MS",30,1)) Const game_pause = 1 Const game_menue = 2 Const game_haupt = 3 Const game_over = 4 Global game_zustand = game_menue Type TMatrix Field x%,y# Field speed#,length% Field steps% End Type Const MAX=30 ; Maximale Anzahl der "Code-Ketten" festlegen Const MINLENGTH=20 ; Minimale Länge der "Code-Ketten" festlegen Const MAXLENGTH=50 ; Maximale Länge der "Code-Ketten" festlegen Const MINSPEED=7 ; Minimale Geschwindigkeit der "Code-Ketten" festlegen Const MAXSPEED=17 ; Maximale Geschwindigkeit der "Code-Ketten" festlegen Global matrix_count=0 Global fps,fps1,fpstimer Global DeltaT#,T# Type bullet Field obj Field destroy Field alpha# End Type Const TYPE_WORLD = 1 Const TYPE_SHOT = 2 Const MOUSE_SENS# = 6.0 mx = GraphicsWidth()/2 my = GraphicsHeight()/2 Collisions TYPE_SHOT,TYPE_WORLD,2,1 ;cam = CreateCamera() ;PositionEntity cam,0,3,-8 Global bulletsprite = CreateSphere() EntityColor bulletsprite,255,255,0 EntityType bulletsprite,TYPE_SHOT ScaleEntity bulletsprite,10.2,10.2,10.2 EntityRadius bulletsprite,0.2 HideEntity bulletsprite Global cube2 = CreateCube() EntityColor cube2,255,0,0 PositionEntity cube2,0,0,15 EntityType cube2,TYPE_WORLD Global cube=CreateCube() FitMesh cube,-250,-25,-250,500,500,500 FlipMesh cube Global tex=LoadTexture( "chorme-2.bmp" ) ScaleTexture tex,1.0/3,1.0/3 EntityTexture cube,tex EntityAlpha cube,.4 EntityFX cube,1 EntityType cube,TYPE_WORLD ;floor mirrior wegen performance ausgestellt ;floor mirror ;m=CreateMirror() ;ight Global light=CreateLight() TurnEntity light,45,45,0 ;camera Global camera=CreateCamera() cam_xr#=30:cam_yr#=0:cam_zr#=0:cam_z#=-100 tex=LoadTexture( "model\ogro\skin.jpg" ) Global dragon=LoadMD2( "model\ogro\tris.md2" ) EntityTexture dragon,tex TurnEntity dragon,0,180,0 EntityParent camera,dragon ,0 ;Wichtig. Hauptschleife. Hier wird das ganze Spiel verwaltet. Repeat Select game_zustand Case game_menue GameMenue() Case game_haupt GameHaupt() Case game_pause GamePause() End Select Until game_zustand = game_over End Function GameMenue() Local temp_zustand = game_zustand FlushMouse() FlushKeys() ShowPointer SetFont(LoadFont("Comic Sans MS",30,1)) Repeat ClsColor 0,0,0 Cls Color 0,0,255 Text GraphicsWidth()/2,100,"Menue",1,1 Color 255,255,255 Text GraphicsWidth()/2,400,"START" Color 255,255,255 Text GraphicsWidth()/2,500,"ENDE" If MouseHit(1) If RectsOverlap(MouseX(),MouseY(),1,1,GraphicsWidth()/2,400,StringWidth("START"),StringHeight("START")) game_zustand = game_haupt ElseIf RectsOverlap(MouseX(),MouseY(),1,1,GraphicsWidth()/2,500,StringWidth("ENDE"),StringHeight("ENDE")) game_zustand = game_over EndIf EndIf If KeyHit(1) End EndIf ;While Not KeyHit(1)=1 ;Cls If T=0 Then T=MilliSecs() DeltaT=(MilliSecs()-T)/1000 T=MilliSecs() If MilliSecs()-fpstimer>1000 Then fps1=fps fps=0 fpstimer=MilliSecs() Else fps=fps+1 End If Matrix() Color 255,0,0 Text 5,5,"FPS: "+fps1 Color 255,255,255 Flip ;Wend Flip Until game_zustand<>temp_zustand End Function Function GameHaupt() Local temp_zustand = game_zustand Local x = GraphicsWidth()/2 Local y = GraphicsHeight()/2 Local h = 0 FlushKeys() FlushMouse() HidePointer yg#=0 Repeat frametime_sec# = (endtime - now) / 1000.0 now = MilliSecs() Cls ;Cachen mxs#=-MouseXSpeed() mys#=MouseYSpeed() ;Drehen If mxs#<>0 Then RotateEntity dragon,EntityPitch(dragon),EntityYaw(dragon)+mxs#,EntityRoll(dragon) If mys#<>0 Then If mys#>0 Then If EntityPitch(camera)+mys#>70 mys#=70-EntityPitch(camera) EndIf RotateEntity camera,EntityPitch(camera)+mys#,EntityYaw(camera),EntityRoll(dragon) ElseIf mys#<0 Then If EntityPitch(camera)+mys#<-10 mys#=-10-EntityPitch(camera) EndIf RotateEntity camera,EntityPitch(camera)+mys#,EntityYaw(camera),EntityRoll(dragon) EndIf EndIf ;Maus zurücksetzen MoveMouse 320,240 If KeyDown(203) TurnEntity dragon,0,8,0 End If If KeyDown(205) TurnEntity dragon,0,-8,0 End If If KeyDown(200) MoveEntity dragon,0,0,6.0 If MD2AnimTime(dragon) = 72 Then jump = 0 If jump = 0 Then moved = 1 forward = 1 EndIf EndIf If KeyDown(208) MoveEntity dragon,0,0,-3.0 moved = 1 jump = 0 forward = 0 End If If KeyHit(57)=1 Then jump = 1 If MD2AnimTime(dragon) < 66 Or MD2AnimTime(dragon) > 71 Then AnimateMD2 dragon,3,0.1,66,72 EndIf EndIf If KeyDown(57) And EntityY(dragon)<0 yg=5 MoveEntity dragon,0,yg,0 yg=yg-.30 If EntityY(dragon)<0 yg=0 If moved = True If forward = True If MD2AnimTime(dragon) < 40 Or MD2AnimTime(dragon) > 46 Then If jump = 0 Then AnimateMD2 dragon,1,0.3,40,46 EndIf End If End If End If If forward = False If MD2AnimTime(dragon) < 40 Or MD2AnimTime(dragon) > 46 Then If jump = 0 Then AnimateMD2 dragon,1,-0.08,40,45 EndIf End If End If If moved = False If MD2AnimTime(dragon) < 0 Or MD2AnimTime(dragon) > 10 Then If jump = 0 Then AnimateMD2 dragon,1,0.2,2,35 EndIf End If End If moved = 0 forward = 0 ;If KeyDown(31) ; cam_xr=cam_xr+2 ; If cam_xr>90 cam_xr=90 ;Else If KeyDown(45) ; cam_xr=cam_xr-2 ; If cam_xr<5 cam_xr=5 ;EndIf If KeyDown(30) cam_z=cam_z+1:If cam_z>-10 cam_z=-10 Else If KeyDown(44) cam_z=cam_z-1:If cam_z<-180 cam_z=-180 EndIf PositionEntity camera,0,0,0 ;RotateEntity camera,cam_xr,cam_yr,cam_zr MoveEntity camera,0,0,cam_z If MouseHit(1) bullet.bullet = New bullet bullet\obj = CopyEntity(bulletsprite) ShowEntity bullet\obj PositionEntity bullet\obj,EntityX(camera),EntityY(camera),EntityZ(camera) RotateEntity bullet\obj,EntityPitch(dragon),EntityYaw(dragon),EntityRoll(dragon) MoveEntity bullet\obj,0,0,2.0 bullet\destroy = now + 5000 bullet\alpha# = 1.0 EndIf For bullet.bullet = Each bullet MoveEntity bullet\obj,0,0,25.0 * frametime_sec# If now >= bullet\destroy - 2000 Then bullet\alpha# = bullet\alpha# -0.01 EntityAlpha bullet\obj,bullet\alpha# ElseIf now >= bullet\destroy Then FreeEntity bullet\obj Delete bullet EndIf Next UpdateWorld RenderWorld Text 120,15,"Drücke M um in die FRAME auswahl zu kommen" Text 120,35,"Zoom in Y/Z ; Zoom out A" Text 0,0,"MD2AnimTime: "+MD2AnimTime(dragon) Color 255,255,255 Line mx - 5, my, mx + 5, my Line mx, my -5, mx, my + 5 If KeyHit(1) game_zustand = game_menue EndIf Flip Until game_zustand<>temp_zustand End Function Function GamePause() dragon=0 light=0 Local temp_zustand = game_zustand FlushKeys() FlushMouse() Repeat ClsColor 255,0,0 Cls Color 0,0,255 Text GraphicsWidth()/2,GraphicsHeight()/2,"ICH BIN DIE PAUSE!!!",1,1 If KeyHit(57) game_zustand = game_haupt EndIf Flip Until game_zustand<>temp_zustand End Function Function Matrix() If matrix_count<=MAX Then neu.TMatrix=New TMatrix neu\y#=0 neu\x%=Rand(0,64)*10 neu\speed#=Rand(MINSPEED,MAXSPEED) neu\length%=Rand(MINLENGTH,MAXLENGTH) neu\steps%=255/neu\length% matrix_count=matrix_count+1 End If For mat.TMatrix=Each TMatrix For i = 0 To mat\length% Select i Case 0: Color 255,255,255 Default: Color 0,255-(i*mat\steps%),0 End Select y = mat\y#-(i*10) If y>=0 And y<480 Then Text mat\x%,y,Chr$(Rand(30,200)) mat\y#=mat\y#+(mat\speed# * DeltaT#) Next If (mat\y#-(mat\length% * 10))>480 Then Delete mat matrix_count=matrix_count-1 End If Next End Function |
||
![]() |
Goodjee |
![]() Antworten mit Zitat ![]() |
---|---|---|
ich habe auch ein problem, der code ist zu lang | ||
"Ideen sind keine Coladosen, man kann sie nicht recyclen"-Dr. House
http://deeebian.redio.de/ http://goodjee.redio.de/ |
![]() |
Xaron |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wenn Du die Schüsse alle einzeln sichtbar machen möchtest (bei langsamen Geschossen), dann hilft Dir vielleicht das hier aus einem anderen Beitrag von mir:
Wenn Du schießen möchtest, musst Du Dir zu allererst mal die Anfangsrichtung Deines Schusses merken, in die der Schuss fliegen soll. Dazu transformierst Du einen nach vorn in Z-Richtung zeigenden Vektor (0,0,1) in das lokale Spieler-Koordinatensystem. Damit hast Du die nötigen x, y, und z-Anzeile für die Richtung: Code: [AUSKLAPPEN] TFormNormal( 0, 0, 1, playerEntity, 0 ) directionPitch# = TFormedX() directionYaw# = TFormedY() directionRoll# = TFormedZ() Jetzt positionierst Du den Schuss in etwa dort, wo Dein Spieler steht. In Deiner Update-Funktion musst Du den Schuss dann nur noch in die Richtung bewegen, die Du Dir am Anfang gemerkt hast, also: Code: [AUSKLAPPEN] ;Geschwindigkeit berechnen vel# = deltaTime# * bulletSpeed# ;neue Position ermitteln xVel# = vel# * directionPitch# yVel# = vel# * directionYaw# zVel# = vel# * directionRoll# ;Schussposition setzen TranslateEntity( bulletEntity, xVel, yVel, zVel ) Ich hoffe, ich konnte helfen. ![]() Gruß - Xaron |
||
Cerberus X - Monkey X Reloaded! |
![]() |
Black Spider |
![]() Antworten mit Zitat ![]() |
---|---|---|
falls das ein ego-shooter wie CounterStrike werden soll würd ich mit CameraPick arbeiten.
Denn bei ego-shootern sieht man die schüsse nicht, ausser du willst ne Bullet time funktion einbauen... naja, hier mal ein ansatz: Code: [AUSKLAPPEN] ;zuerst musst du die Landschaft auf pickbar stellen EntityPickMode terrain,3 ;3 Steht für Polygon, was bei landschaften ja nun mal so sein sollte ^^ ;dann brauchst du einen Funken Global spark=LoadSprite("Funke.bmp") EntityColor spark,200,0,0 ScaleSprite spark,1,1 EntityOrder spark,-1 HideEntity spark ;--- Irgendwo in der Hauptschleife --- If waffe$ = "Gewehr" And MouseHit(1) Then picked=CameraPick(camm,GraphicsWidth()/2,GraphicsHeight()/2) gew.schuss=New schuss gew\obj=CopyEntity(spark) gew\dauer=1 PositionEntity gew\obj,PickedX(),PickedY(),PickedZ() End If For gew.schuss = Each Schuss gew\dauer = gew\dauer -.1 EntityAlpha gew\obj,gew\dauer If gew\dauer <= 0 Then FreeEntity gew\obj:Delete First schus Next ... |
||
Coming soon:
http://img132.imageshack.us/im...im2ab6.gif |
mevsmp |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
HI, schnmal danke für eure Hilfe, werds bei Zeiten mal testen.
Aber müsste mein Code (der Code vom Tut) nicht auch gehen? In dem Beispiel hat das ja alles super geklappt, biss ich das in meinen Code eingebaut hab. Vielleicht findet ja noch einer den Fehler... Hoffentlich mfg mevsmp |
||
![]() |
Xaron |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also das hier ist ja der wesentliche Code bei Dir:
Code: [AUSKLAPPEN] If MouseHit(1) bullet.bullet = New bullet bullet\obj = CopyEntity(bulletsprite) ShowEntity bullet\obj PositionEntity bullet\obj,EntityX(camera),EntityY(camera),EntityZ(camera) RotateEntity bullet\obj,EntityPitch(dragon),EntityYaw(dragon),EntityRoll(dragon) MoveEntity bullet\obj,0,0,2.0 bullet\destroy = now + 5000 bullet\alpha# = 1.0 EndIf Was ich daran nicht verstehe: Warum gibst Du dem Schuss die gleiche Drehrichtung wie der "dragon"? Das heisst ja, Du schiesst immer in die Richtung, in die der dragon schaut und nicht dorthin, wo er steht. ![]() Gruß - Xaron |
||
Cerberus X - Monkey X Reloaded! |
mevsmp |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
nene,
das hast du falsch verstanden. Das ist ein ThirdPerson game. Der drache läuft also vor der camera. Also der Drache ist meine Spielfigur! Und wohin der guckt, dahin soll auch geschossen werden. Nur leider fliegen die schüsse meistens falsch ![]() please help. |
||
![]() |
Black Spider |
![]() Antworten mit Zitat ![]() |
---|---|---|
ahh! So willste das also...
Sach das doch: Code: [AUSKLAPPEN] Function schiessen() b.bullet = New bullet ;das ganze zeug zum laden usw. EntityParent b\obj,dragon End Function Function Update(b.bullet) EntityParent b\obj,0 MoveEntity b\obj,0,0,b\speed ; der ganze rest... End Function |
||
Coming soon:
http://img132.imageshack.us/im...im2ab6.gif |
mevsmp |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
hey THX für deine hilfe. Aber wie bau ich diesen code nun bei mir Vollständig ein? Wär nett wenn mir das mal jemand vollständig machen könnte. also dass ich den code dann komplett in meinen einbauen kann...
Muss ich jetzt meinen "schiess code" mit deinem zusammen binden, oder wie? (nein ihr sollt nicht mein ganzes spiel coden, bin noch anfänger, deswegen wär das ein super Bsp...) please help. mfg mevsmp |
||
ke^kx |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Guck dir doch einfach an, was Black Spider an deinem Code veränder hat und versuch es ersteinmal zu verstehen. Und dann baust du es in deinen Code ein. Dann weißt du schon, wohin es gehört ![]() Jiriki |
||
http://i3u8.blogspot.com
Asus Striker II Intel Core2Quad Q9300 @ 2,5 GHz (aber nur zwei Kerne aktiv aufgrund der Instabilität -.-) Geforce 9800 GTX 2GB RAM |
mevsmp |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hab schon zig versionen ausprobiert.. Nichts hat geklappt. Wo soll ich den denn einbauen, WIE??
;hier das ganze Zeug zum laden usw. Was zB soll ich darunter verstehen???????? Könnt ihr mir nichtmal genauer helfen und nicht immer Rätselaufgaben stellen? und @ den code verstehen: das würde vielleicht dann passieren wenn der auch funktionieren würde und man es nachvollziehen könnte. mfg mevsmp |
||
![]() |
Klip |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] ;Hier das ganze Zeug laden:
b\x = x_startpos b\y = y_startpos b\z = z_startpos b\speed = startspeed ; usw., usf... |
||
mevsmp |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
OHMAN, ist zwar nett das ihr mir hilft. Aber noch ein Puzzel-Teil hilft mir nicht weiter!!!
Wenn ihr das alle könnt, wieso dann nicht einmal komplett posten? würde bestimmt noch anderen helfen... Deswegen auch ein Forum..^^ |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group