Wie schießen?

Übersicht BlitzBasic Blitz3D

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

rctuner

Betreff: Wie schießen?

BeitragDi, März 21, 2006 17:31
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, März 21, 2006 17:33
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, März 21, 2006 17:40
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, März 21, 2006 17:43
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, März 21, 2006 17:46
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, März 21, 2006 17:47
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, März 21, 2006 17:48
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, März 21, 2006 17:51
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, März 21, 2006 17:54
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, März 21, 2006 17:55
Antworten mit Zitat
Benutzer-Profile anzeigen
@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

BeitragDi, März 21, 2006 17:58
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, März 21, 2006 18:00
Antworten mit Zitat
Benutzer-Profile anzeigen
@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

BeitragDi, März 21, 2006 18:03
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, März 21, 2006 18:04
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Smile
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

rctuner

BeitragDi, März 21, 2006 18:37
Antworten mit Zitat
Benutzer-Profile anzeigen
@ ChEsTeR, Code ist ja schon da. Siehe den Editierten Beitrag oben.

Hoffe ihr könnt mir helfen.
 

ke^kx

BeitragDi, März 21, 2006 22:05
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, März 21, 2006 22:11
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMi, März 22, 2006 19:44
Antworten mit Zitat
Benutzer-Profile anzeigen
@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.. Sad

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

BeitragMi, März 22, 2006 20:26
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMi, März 22, 2006 22:00
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Sad


Hoffe ihr könnt mir nun helfen!!!

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group