Ist das so richtig? [ ja es ist richtig ] =)

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

noobyblaster

Betreff: Ist das so richtig? [ ja es ist richtig ] =)

BeitragFr, Nov 27, 2009 12:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Sers
Ich hab mich heute endlich mal an Type rangetraut (ich habs schon ewig vor mir hergeschoben). ich bin der meinung es funktioniert/es ist richtig so.
aber ich würd gern mal von den pro's wissen ob das denn wirklich stimmt =)

Code: [AUSKLAPPEN]
Type k
   Field e
   Field x#
   Field y#
   Field z#
   Field tex
   Field ty
End Type


Code: [AUSKLAPPEN]

If KeyHit(28) Then
   kugel.k = New k
   kugel\e=CreateSphere()
   kugel\x# = Rnd(10,50)
   kugel\y# = Rnd(1,2)
   kugel\z# = Rnd(10,50)
   kugel\tex = box_tex
   kugel\ty = 3
EndIf

For kugel.k = Each k
   PositionEntity kugel\e,kugel\x#,kugel\y#,kugel\z#
   EntityType kugel\e,kugel\ty
   EntityTexture kugel\e,kugel\tex
Next


hab ich hier mit type gearbeitet? ( also richtig )

@ Admins dieser beitrag kann nach beantwortung gern gelöscht werden =)
Projekt: Crazy Racedriver [vorübergehend eingestellt]
Genre: Rennspiel
Fortschritt: ca. 60%
  • Zuletzt bearbeitet von noobyblaster am Mi, Dez 02, 2009 16:53, insgesamt einmal bearbeitet

count-doku

BeitragFr, Nov 27, 2009 12:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,

ja, du hast absolut richtig gearbeitet.

Aber , hast du auch schon versucht die Schüsse zu bewegen/upzudaten?





Mfg,
count-doku

noobyblaster

BeitragFr, Nov 27, 2009 12:51
Antworten mit Zitat
Benutzer-Profile anzeigen
nein das hab ich noch nicht versucht
aber ich werds noch machen und erneut nachfragen ( obs richtig ist ) =)
Projekt: Crazy Racedriver [vorübergehend eingestellt]
Genre: Rennspiel
Fortschritt: ca. 60%

Dottakopf

BeitragFr, Nov 27, 2009 13:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!


~EDIT~

Huh da seh ich ja noch was, bin jetzt nicht so fit mit 3D, aber ich denke du kannst das Erstellen der Kugel und das Positionieren zu einem Step zusammen fassen.

Sprich:
Code: [AUSKLAPPEN]

If KeyHit(28) Then
   kugel.k = New k
   kugel\e=CreateSphere()
   kugel\x# = Rnd(10,50)
   kugel\y# = Rnd(1,2)
   kugel\z# = Rnd(10,50)
   kugel\tex = box_tex
   kugel\ty = 3

   PositionEntity kugel\e,kugel\x#,kugel\y#,kugel\z#
   EntityType kugel\e,kugel\ty
   EntityTexture kugel\e,kugel\tex
EndIf


Somit brauchst du nicht noch einmal alle Types durchrattern nur um sie zu positionieren Wink
=Speed Optimierung





Evt. beugt das deiner Frage vor:

Type Stuff


Type komplett:
https://www.blitzforum.de/foru...hp?t=25321

Type Schnellkurs:
https://www.blitzforum.de/foru...hp?t=25694


Speziell Schüsse:
https://www.blitzforum.de/foru...hp?t=22296

Viel Erfolg

Gruß
Dottakopf

noobyblaster

BeitragFr, Nov 27, 2009 13:53
Antworten mit Zitat
Benutzer-Profile anzeigen
hm ok .
hab mich jetzt mir dem schuss beschäftigt aber komm nicht recht weiter.

Code: [AUSKLAPPEN]
Type k
   Field e
   Field x#
   Field y#
   Field z#
   Field sx#
   Field sy#
   Field sz#
   Field tex
   Field ty
   Field move#
   Field dista#
End Type



Code: [AUSKLAPPEN]
Global f_k = CreatePivot() 
PositionEntity f_k,0,2,5
EntityType f_k,1

cam=CreateCamera(f_k)


ich hab mir gedacht das ich das mit nem Pivot machen kann
komm jetzt aber nicht weiter.

Code: [AUSKLAPPEN]
If KeyHit(28) Then
   kugel.k = New k
   kugel\e=CreateSphere()
   kugel\x# = EntityX(f_k)
   kugel\y# = EntityY(f_k)
   kugel\z# = EntityZ(f_k)
   kugel\sx# = 0.2
   kugel\sy# = 0.2
   kugel\sz# = 0.2
   kugel\tex = box_tex
   kugel\ty = 4
   kugel\move# = 10
   kugel\dista# = 50
   PositionEntity kugel\e,kugel\x#,kugel\y#,kugel\z#
   EntityType kugel\e,kugel\ty
   EntityTexture kugel\e,kugel\tex
   ScaleEntity kugel\e,kugel\sx#,kugel\sy#,kugel\sz#
EndIf

For kugel.k = Each k
   
Next


Die Kamera verfolgt den Pivot, die schüsse kommen immer " aus dem Pivot und der Pivot ist immer in der mitte, also muss man immer zu seinem ziel hinlaufen( welches man abschiesen will).
so hab ich mir das gedacht aber jetzt steh ich auf dem schlauch Rolling Eyes
Projekt: Crazy Racedriver [vorübergehend eingestellt]
Genre: Rennspiel
Fortschritt: ca. 60%

count-doku

BeitragFr, Nov 27, 2009 14:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Dann müsste sich der Pivot ja bewegen.

Das geht, du musst halt nur den Spieler bewegen und die Schüsse updaten.
Hier mal ein kleiner Beispiel Code: [AUSKLAPPEN]
Graphics3D 800,600,32,2
SetBuffer BackBuffer()

Global GameSpeed%=60
Global FramePeriod%=1000/GameSpeed
Global FrameTime%=MilliSecs()-FramePeriod
Global DeltaTimeOld

Const TYPE_PLAYER=1,TYPE_ZIEL=2,TYPE_SHOT=3;Schonmal Collisions teil.
Collisions TYPE_SHOT,TYPE_ZIEL,2,1

Global f_k = CreatePivot()
PositionEntity f_k,0,0,-20
EntityType f_k,TYPE_PLAYER
Global ziel=CreateCone();Ein Ziel
EntityType ziel,TYPE_ZIEL
Global cam=CreateCamera(f_k)

Type k
   Field e
   Field x#
   Field y#
   Field z#
   Field sx#
   Field sy#
   Field sz#
   Field tex
   Field ty
   Field move#
   Field dista#
End Type

Local FrameElapsed%,FrameTicks%,FrameTween#,t%,fps#,FPS_LAST=MilliSecs()
Repeat
   Cls
   ; Frametween Berechnungen
   Repeat FrameElapsed=MilliSecs()-FrameTime Until FrameElapsed
   FrameTicks=FrameElapsed/FramePeriod
   FrameTween=Float(FrameElapsed Mod FramePeriod)/Float(FramePeriod)
   For t=1 To FrameTicks
      ; Frametween Captureworld
      FrameTime=FrameTime+FramePeriod : If t=FrameTicks Then CaptureWorld
      If KeyHit(28) Then;Neue Kugel erstellen
         kugel.k = New k
         kugel\e=CreateSphere(5,f_k);Kugel wird direkt am Pivot platziert [u]und[/u] richtig gedreht.
         kugel\x# = EntityX(f_k)
         kugel\y# = EntityY(f_k)
         kugel\z# = EntityZ(f_k)
         kugel\sx# = 0.2
         kugel\sy# = 0.2
         kugel\sz# = 0.2
         kugel\tex = "";Hat keine, evtl. später einfügen
         kugel\ty = TYPE_SHOT
         kugel\move# = 10
         kugel\dista# = 50
         EntityType kugel\e,kugel\ty
         ;EntityTexture kugel\e,kugel\tex;Dann aktivieren
         ScaleEntity kugel\e,kugel\sx#,kugel\sy#,kugel\sz#
         EntityParent kugel\e,0;Kugel für bewegung vom Pivot lösen
      EndIf
      For kugel.k=Each k;Alle Kugeln durchgehen
         UpdateShot(kugel.k)
      Next
      UpdatePlayer()
      UpdateWorld()
   Next
   RenderWorld(FrameTween)
   Color 255,255,255
   fps#=(19*fps#+(1000./(MilliSecs()-FPS_LAST)))/20.:FPS_LAST=MilliSecs();FPS zählen
   Text 1,15,fps#+" FPS";FPS anzeigen#
   Flip 0
Until KeyHit(1)

Function UpdateShot(kugel.k);Die Kugel wird nach vorne bewegt. Später hier auch Kollision.
   MoveEntity kugel\e,0,0,2
End Function
Function UpdatePlayer();Hier wird der Player bewegt
   TurnEntity f_k,0,KeyDown(203)-KeyDown(205),0
   MoveEntity f_k,0,0,KeyDown(200)-KeyDown(208)
End Function

Steuerung: Pfeiltasten.

Wenn du Fragen zum Code hast, ich erklärs dir gerne.
Ansonsten guck dir mal in Samples\mak\ die castle demo an, erklärt die Schuss abfrage.


Mfg,
count-doku

noobyblaster

BeitragMo, Nov 30, 2009 11:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Dankefein =)
und wenn ich die Kugeln dann löschen will (wenn sie nicht treffen) mache ich ne Function oder?

Code: [AUSKLAPPEN]
DeletKugel(kugel.k)

Function DeletShot(kugel.k)
If Not EntityCollided(kugel\e,TYPE_ZIEL) And EntityDistance(cam,kugel\e) > 100 Then FreeEntity kugel\e
End Function 
Projekt: Crazy Racedriver [vorübergehend eingestellt]
Genre: Rennspiel
Fortschritt: ca. 60%

FireballFlame

BeitragMo, Nov 30, 2009 13:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Vergiss aber nicht, das Typeobjekt hinterher noch mit Delete zu löschen.

Ich würde übrigens empfehlen, den Type Kugel zu nennen und die Objektvariable k (o.ä.) anstatt umgekehrt Wink
PC: Intel Core i7 @ 4x2.93GHz | 6 GB RAM | Nvidia GeForce GT 440 | Desktop 2x1280x1024px | Windows 7 Professional 64bit
Laptop: Intel Core i7 @ 4x2.00GHz | 8 GB RAM | Nvidia GeForce GT 540M | Desktop 1366x768px | Windows 7 Home Premium 64bit

M0rgenstern

BeitragMo, Nov 30, 2009 15:35
Antworten mit Zitat
Benutzer-Profile anzeigen
noobyblaster hat Folgendes geschrieben:
Dankefein =)
und wenn ich die Kugeln dann löschen will (wenn sie nicht treffen) mache ich ne Function oder?

Code: [AUSKLAPPEN]
DeletKugel(kugel.k)

Function DeletShot(kugel.k)
If Not EntityCollided(kugel\e,TYPE_ZIEL) And EntityDistance(cam,kugel\e) > 100 Then FreeEntity kugel\e
End Function 


Nur mal so ne Frage:
Wenn eine Kugel nicht trifft, dann willst du sie direkt löschen?
Und wenn sie kurze Zeit später einen anderen Gegner treffen würde?
Würdest du das löschen der Kugel nicht besser über die Entfernung laufen lassen? Also, z.B. wenn sie aus dem Sichtbereich des SPielers verschwindet wird sie gelöscht.

Korrigier mich bitte, wenn ich dich falsch verstanden habe.

Lg, M0rgenstern

FireballFlame

BeitragMo, Nov 30, 2009 15:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Das tut er doch in dem Code, den du gerade zitiert hast, oder nicht?
PC: Intel Core i7 @ 4x2.93GHz | 6 GB RAM | Nvidia GeForce GT 440 | Desktop 2x1280x1024px | Windows 7 Professional 64bit
Laptop: Intel Core i7 @ 4x2.00GHz | 8 GB RAM | Nvidia GeForce GT 540M | Desktop 1366x768px | Windows 7 Home Premium 64bit

M0rgenstern

BeitragMo, Nov 30, 2009 15:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja... und ich versteh den Sinn nicht.
Du überprüfst ob die Kugel nicht kollidert.
Wenn sie das nicht tut, dann wird sie gelöscht.
Aber sie könnte doch auch später, wenn sie sich ein Stück weiterbewegt hat, einen anderen Gegner treffen.
Das meinte ich.
Deshalb wäre es klüger sie zu löschen, wenn sie sich in einer bestimmten Entfernung zum Spieler befindet.

Lg, M0rgenstern

noobyblaster

BeitragMo, Nov 30, 2009 15:48
Antworten mit Zitat
Benutzer-Profile anzeigen
naja is doch so wenn die kugel nicht kollidiert und die distance > 100 ist erst dann wird sie gelöscht
Projekt: Crazy Racedriver [vorübergehend eingestellt]
Genre: Rennspiel
Fortschritt: ca. 60%

M0rgenstern

BeitragMo, Nov 30, 2009 15:49
Antworten mit Zitat
Benutzer-Profile anzeigen
oha... tut mir Leid.
Die Bedingung nach dem AND hab ich geschickt überlesen^^

Lg, M0rgenstern

noobyblaster

BeitragDi, Dez 01, 2009 8:06
Antworten mit Zitat
Benutzer-Profile anzeigen
thehe ^^
jetzt hab ich ganz vergessen euch zu sagen das dies nicht geht Very Happy
wenn ich das mesh nach updateshot() löschen will, dann kommt dann (logischer weise) entity does not exist. Is ja auch klar weil er den schuss ja immernoch updaten mag.....
aber ich weiß nicht recht wie ich das hinbekommen kann.
Projekt: Crazy Racedriver [vorübergehend eingestellt]
Genre: Rennspiel
Fortschritt: ca. 60%

mpmxyz

BeitragDi, Dez 01, 2009 18:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie wäre es mit "Delete k" beim Löschen des Schusses?
Dann ist auch der Type-Eintrag zum Schuss weg.
mfG
mpmxyz
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer

noobyblaster

BeitragMi, Dez 02, 2009 12:42
Antworten mit Zitat
Benutzer-Profile anzeigen
des wär mal ne idee Very Happy
Dankefein =)
Projekt: Crazy Racedriver [vorübergehend eingestellt]
Genre: Rennspiel
Fortschritt: ca. 60%

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group