Wie schießen?
Übersicht

![]() |
rctunerBetreff: Wie schießen? |
![]() Antworten mit Zitat ![]() |
---|---|---|
hi,
was für möglichkeiten gibt es um zu schießen? also in 3d, und am besten auch so das ichs später mal in ein Net-Game einbauen kann. mein spiel ist in der Thirdperson-Sicht. Also eine Figur läuft vor der Kamera und ich hab en Fadenkreuz^^. Nur hackts jetzt bei mir beim schießen. |
||
HW |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
1. Selbst denken.
2. Suche ![]() 3. Fragen stellen, die nicht allzu allgemein sind. Außerdem wäre es nützlich, wenn du sagst, wie du dir das Schießen vorstellst. Es ist ein großer Unterschied, ob da jetzt ein Projektil zum Ziel fliegen soll, oder wie bei einer Pistole der Schuss sofort berechnet wird. |
||
![]() |
rctuner |
![]() Antworten mit Zitat ![]() |
---|---|---|
1. Selbst denken: schon getan , ergebniss = 0
2. Suche benutzen: schon getan, ergebniss = über 100 Posts, aber kein bsp coder der funktioniert. 3. ich brauch eigendlich beides, da ich einmal zb Pistole brauche, wo die schüsse direkt berechnet werden und später mal en rocketlauncher wo es fliegende Projektile sein sollten. Oder soll ich das nochmal in den Beginner schreiben?! mfg rctuner |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ok hier ein prinzipielles Vorgehen (code bekommste keinen von den meisten User, da es gegen unsere Prinzipien verstösst. Man lernt nix bei copy-paste):
1. Geschoss am Ort der Figur erzeugen 2. Geschoss so drehen, dass es an den Zielpunkt fliegen würde (kannst du über CameraPick ermitteln) 3. Bei jedem Schleifendurchlauf die Position entsprechend seiner Geschwindigkeit aktualisieren (MoveEntity) |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
ke^kx |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Und Schüsse ohne Projektil kannst du mit ql:LinePick lösen.
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 |
HW |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Mit ql:camerapick gehts auch. Wichtig ist aber auch, dass das Ziel einen ql:entitypickmode hat.
Edit: Stimmt, geht mit CameraPick nicht. Aber das mit dem EntityPickMode ist trotzdem wichtig. |
||
- Zuletzt bearbeitet von HW am Di, März 21, 2006 17:49, insgesamt einmal bearbeitet
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Nein gehts nicht, wenn er 3rd Person will.
Bitte lesen vor dem Antworten |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
Chester |
![]() Antworten mit Zitat ![]() |
---|---|---|
Doch, ql:CameraPick dürfte auch gehen, denn auch bei 3rd Person Shooter schießt die Pistole normalerweise in die Mitte eines Zielkreuzes, welches im Normalfall an einer 2D-Bildschirmkoordinate angegeben wird.
MfG ChEsTeR |
||
![]() |
rctuner |
![]() Antworten mit Zitat ![]() |
---|---|---|
ich habs immer mit einem einfachem sphere gemacht, den ich dann nach vorne bewegt hab. aber dir schüsse sind meistens falsch geflogen. Ich hatte die Castle.x von den samples in meine map geladen (als test) solange ich noch unten war, konnte ich priema schießen, nur dann ab einer bestimmten position sind die Kugeln nicht mehr aus mir rausgeflogen, sondern aus der mitte der castle?!?!! | ||
HW |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
@Chester: Es stimmt zwar, dass die Kugel dann zu diesem Fadenkreuz fliegen würde, aber auf dem Weg dahin könnte noch ein Hindernis sein. Daher braucht man dafür LinePick.
@rcturner: Deine Beschreibung kann uns ohne Code nicht viel helfen. |
||
![]() |
rctuner |
![]() Antworten mit Zitat ![]() |
---|---|---|
jo, gerne werde ich ihn posten, wenn mir auch wirklich mal geholfen wird!
hoffe ihr findet den Fehler, wie gesagt, ab einer unbekannten position fliegen die Spheres nicht mehr aus dem dragon (wie es eigendlich sein sollte) sondern aus dem eingang der Castle map. So hier mein Code: Code: [AUSKLAPPEN] 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 Global fps,fps1,fpstimer Global DeltaT#,T# Global muniP=99 Global muniS=line4 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 Collisions 3 , TYPE_WORLD, 2, 3 Global bulletsprite = CreateSphere() EntityColor bulletsprite,255,255,0 EntityType bulletsprite,TYPE_SHOT ScaleEntity bulletsprite,5.2,5.2,5.2 EntityRadius bulletsprite,0.2 HideEntity bulletsprite Global bulletsprite2 = CreateSphere() EntityColor bulletsprite2,0,255,255 EntityType bulletsprite2,TYPE_SHOT ScaleEntity bulletsprite2,10.2,10.2,10.2 EntityRadius bulletsprite2,0.2 HideEntity bulletsprite2 Global fadenkreuz=LoadImage ("fadenkreuz.bmp") ;environment cube castle=LoadMesh( "castle\castle1.x" ) ScaleEntity castle,1.15,1.15,1.15 EntityType castle,TYPE_WORLD ;simple light Global light=CreateLight() TurnEntity light,45,45,0 ;camera Global camera=CreateCamera() cam_xr#=30:cam_yr#=0:cam_zr#=0:cam_z#=-100 ;dragon 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 EntityType dragon,3 EntityRadius dragon,12,24 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() SetFont(LoadFont("Comic Sans MS",30,1)) Repeat ClsColor 0,0,0 Cls Color 0,0,255 Text GraphicsWidth()/2,100,"Menue",1,1 ShowPointer 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(28) Then game_zustand = game_haupt If KeyHit(1) End EndIf 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 If fps1<16 Then Color 255,0,0 If fps1>16 Then Color 0,255,0 If fps1=16 Then Color 0,255,0 Text 5,5,"FPS: "+fps1 Color 255,255,255 ;Flip 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#>80 mys#=80-EntityPitch(camera) EndIf RotateEntity camera,EntityPitch(camera)+mys#,EntityYaw(camera),EntityRoll(dragon) ElseIf mys#<0 Then If EntityPitch(camera)+mys#<-50 mys#=-50-EntityPitch(camera) EndIf RotateEntity camera,EntityPitch(camera)+mys#,EntityYaw(camera),EntityRoll(dragon) EndIf EndIf ;Maus zurücksetzen MoveMouse 320,240 ;Movement start If KeyDown(30) ;TurnEntity dragon,0,8,0 MoveEntity dragon,-5,0,0 If MD2AnimTime(dragon) = 72 Then jump = 0 If jump = 0 Then moved = 1 forward = 1 EndIf End If If KeyDown(32) ;TurnEntity dragon,0,-8,0 MoveEntity dragon,5,0,0 If MD2AnimTime(dragon) = 72 Then jump = 0 If jump = 0 Then moved = 1 forward = 1 End If EndIf If KeyDown(17) 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(31) MoveEntity dragon,0,0,-2.0 If MD2AnimTime(dragon) = 72 Then jump = 0 If jump = 0 Then moved = 1 forward = 0 End If EndIf If KeyDown(57)=1 Then jump = 1 If MD2AnimTime(dragon) < 66 Or MD2AnimTime(dragon) > 69 Then AnimateMD2 dragon,3,0.1,66,72 If MD2AnimTime(dragon) = 72 Then SetAnimTime dragon,40 EndIf EndIf If MD2AnimTime(dragon) = 72 Then jump = 0 If KeyDown(57); And EntityY(dragon)<0 yg=1.3 MoveEntity dragon,0,5,0 EndIf ;yg=yg-.10 ; If EntityY(dragon)<0 yg=0 MoveEntity dragon, 0, -3, 0 If moved = True If forward = True If MD2AnimTime(dragon) < 40 Or MD2AnimTime(dragon) > 46 Then If jump = 0 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.18,40,45 EndIf End If End If If moved = False If MD2AnimTime(dragon) < 0 Or MD2AnimTime(dragon) > 40 Then If jump = 0 Then AnimateMD2 dragon,1,0.2,0,40 EndIf End If End If moved = 0 forward = 1 ;Movement end 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(25) cam_z=cam_z+1:If cam_z>-10 cam_z=-10 Else If KeyDown(38) cam_z=cam_z-1:If cam_z<-180 cam_z=-180 EndIf PositionEntity camera,0,35,0 ;RotateEntity camera,cam_xr,cam_yr,cam_zr MoveEntity camera,0,0,cam_z If KeyHit(2) Then weapon$ = "pistol" If KeyHit(3) Then weapon$ = "shotgun" ;**********START DER SCHUSS FUNCTION*********** If MouseHit(1) If muniP>0 If weapon$ = "pistol" Then muniP=muniP-1 bullet.bullet = New bullet bullet\obj = CopyEntity(bulletsprite) ShowEntity bullet\obj PositionEntity bullet\obj,EntityX(dragon),EntityY(dragon)+15,EntityZ(dragon) RotateEntity bullet\obj,EntityPitch(camera)-2,EntityYaw(dragon),EntityRoll(dragon) MoveEntity bullet\obj,0,0,2.0 bullet\destroy = now + 5000 bullet\alpha# = 1.0 EndIf EndIf If muniS>0 If weapon$ = "shotgun" Then muniS=muniS-2 bullet.bullet = New bullet bullet\obj = CopyEntity(bulletsprite2) ShowEntity bullet\obj PositionEntity bullet\obj,EntityX(dragon),EntityY(dragon)+15,EntityZ(dragon) RotateEntity bullet\obj,EntityPitch(camera)-2,EntityYaw(dragon),EntityRoll(dragon) MoveEntity bullet\obj,0,0,2.0 bullet\destroy = now + 5000 bullet\alpha# = 1.0 EndIf EndIf EndIf For bullet.bullet = Each bullet MoveEntity bullet\obj,0,0,99.9 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 ;ende der schuss function Next UpdateWorld RenderWorld fadenpos1 = GraphicsWidth()/2 fadenpos2 = GraphicsHeight()/2 MidHandle fadenkreuz MaskImage fadenkreuz, 255, 255, 255 DrawImage fadenkreuz, fadenpos1, fadenpos2 If weapon = "pistol" Then Text 120,20,"Munition: "+muniP EndIf If weapon = "shotgun" Then Text 120,20,"Munition: "+muniS EndIf Text 120,40,"Zoom in and out; A/Y" Text 0,0,"MD2AnimTime: "+MD2AnimTime(dragon) Text 120,60,"Waffe:" +weapon$ Color 255,255,255 If KeyHit(1) game_zustand = game_menue EndIf If KeyHit(49) game_zustand = game_pause EndIf Flip Until game_zustand<>temp_zustand End Function |
||
- Zuletzt bearbeitet von rctuner am Di, März 21, 2006 21:12, insgesamt 2-mal bearbeitet
![]() |
Chester |
![]() Antworten mit Zitat ![]() |
---|---|---|
@rctuner: Ohne Code nützt uns das nicht viel.
@HW: Sowohl CameraPick als auch LinePick geben die Indendität des ersten Objektes an. Weil wenn ein Gegenstand im Weg ist, kann ja die Maus sich nicht über einen Gegenstand dahinter befinden. |
||
HW |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Chester hat Folgendes geschrieben: @HW: Sowohl CameraPick als auch LinePick geben die Indendität des ersten Objektes an. Weil wenn ein Gegenstand im Weg ist, kann ja die Maus sich nicht über einen Gegenstand dahinter befinden.
Das ist nur bei einem Ego-Shooter richtig. Ich meine, dass das Hindernis zwischen dem Spieler und dem Zielpunkt sein kann. Und diese Strecke liegt bei 3rd Person nicht auf einem einzigen Punkt wie bei Ego-Shootern. |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Das Problem ist: Er steuert in 3rd Person, das heisst die Kamera ist nicht an dem Ort von wo aus geschossen wird, deswegen bringt es nichts fürs projektil. Deswegen ist für "nicht objekt" Geschosse LinePick die einzige Lösung.
CameraPick hingegen wird benötigt um den "Zielpunkt" zu bestimmen, denn egal ob LinePick oder ein Objekt als Geschoss: Die Richtung muss bekannt sein und die bekommt man nur über CameraPick ![]() |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
rctuner |
![]() Antworten mit Zitat ![]() |
---|---|---|
@ ChEsTeR, Code ist ja schon da. Siehe den Editierten Beitrag oben.
Hoffe ihr könnt mir helfen. |
||
ke^kx |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Das die Kugeln kreuz und Quer fliegen ist nur logisch, du musst für jede Kugel nocheinmal im Type die Fields x-, y-, z-Beschleunigung haben und die Bullets dann in jedem Schleifendurchlauf mit ql:Translateentity dahin bewegen. Oder du richtest die Kugeln beim Abschiesen in Richtung des Players aus und Bewegst sie dann jeden Schleifendurchlauf mit ql:MoveEntity
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 |
![]() |
Chester |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also bei deinem Code kann ich von überall schießen, nur manchmal ist die Kugel zu schnell und fliegt durch die Wand durch. Da die Kugeln relativ schnell sind, sieht man meistens nur eine sehr kurze Flugphase und sieht anschließend nur die Kugel an der Wand, und wenn die Wand zu dünn ist, sieht man die Kugel an der Wand hintendran. Und weil nicht immer hintendran eine Wand ist, meint man oft, dass nicht geschossen wurde.
MfG ChEsTeR |
||
![]() |
rctuner |
![]() Antworten mit Zitat ![]() |
---|---|---|
@geschossen wird immer, nur das Problem ist eben das nicht immer aus meinem Player rausgeschossen wird, sondern die Schüsse manchmal aus der Map hinausfliegen und dann an einer anderen Wand wieder haften bleiben.
Sie sollen aber immer aus meinem Player rausfliegen... @Jiriki Hier wird doch 2 mal MoveEntity benutzt! Oder wie meinst du das genau? Könnte es sein das es an der Collosion liegt? Da an manchen stellen der Map die Schüsse ja normal fliegen.. Ich bin Ratlos.. ![]() Code: [AUSKLAPPEN] Type bullet
Field obj Field destroy Field alpha# End Type ;**********START DER SCHUSS FUNCTION*********** If MouseHit(1) If muniP>0 If weapon$ = "pistol" Then muniP=muniP-1 bullet.bullet = New bullet bullet\obj = CopyEntity(bulletsprite) ShowEntity bullet\obj PositionEntity bullet\obj,EntityX(dragon),EntityY(dragon)+15,EntityZ(dragon) RotateEntity bullet\obj,EntityPitch(camera)-2,EntityYaw(dragon),EntityRoll(dragon) MoveEntity bullet\obj,0,0,2.0 bullet\destroy = now + 5000 bullet\alpha# = 1.0 EndIf EndIf If muniS>0 If weapon$ = "shotgun" Then muniS=muniS-2 bullet.bullet = New bullet bullet\obj = CopyEntity(bulletsprite2) ShowEntity bullet\obj PositionEntity bullet\obj,EntityX(dragon),EntityY(dragon)+15,EntityZ(dragon) RotateEntity bullet\obj,EntityPitch(camera)-2,EntityYaw(dragon),EntityRoll(dragon) MoveEntity bullet\obj,0,0,2.0 bullet\destroy = now + 5000 bullet\alpha# = 1.0 EndIf EndIf EndIf For bullet.bullet = Each bullet MoveEntity bullet\obj,0,0,99.9 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 ;ende der schuss function |
||
ke^kx |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hm, scheint eigentlich soweit mehr oder weniger alles zu stimmen. Wahrscheinlich ist es doch nur dass, was Chester bemerkt hat. Denn der Code müsst soweit Stimmen.
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 |
![]() |
rctuner |
![]() Antworten mit Zitat ![]() |
---|---|---|
ich glaube nicht das die schüsse so schnell fliegen dass man sie net sieht oder durch die wand fliegen. ich sehe ja wie sie aus der map herausgeschossen kommen und an der nächsten wand kleben bleiben!
Damit ihr mich besser verstehen könnt, hab ich euch mein komplettes game compiliert und bereitgestellt. http://hyperfrag.pytalhost.com/web/action.rar Testet es selbst. Lest euch kurz die Readme durch, da steht alles weitere. Achja: sofort beim starten des games müsst ihr die Leertaste gedrückt halten. Damit ihr nach oben zur castel schwebt. Dann einfach loslassen und ihr könnt auf der castle stehen. Hier noch ein Bild zum Fehler: [img] http://hyperfrag.pytalhost.com/web/image1.JPG [/img] Hier sieht man wie ich wo ganz anders hinziele und die Schüsse trotzdem aus dem Eingang der Map fliegen und wo ganz andern haften bleiben. Das Problem ist einfach dass das Problem nur manchmal auftritt. ZB wenn man an der Seite der castle auf die Mauern hochläuft und dann Oben steht. Siehe Bild. Wenn ihr das Game testet dann läuft mal ans Ende der castle. Hinten beim haus. In einer Ecke (egal ob links vom Haus oder rechts) dort zB fliegt der Schuss auch wo ganz anders hin. KOMISCH KOMISCH ![]() Hoffe ihr könnt mir nun helfen!!! |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group