spiel stockt?

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

Tarnum

Betreff: spiel stockt?

BeitragSo, Mai 09, 2004 22:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hab ma versucht ein kleines einfaches schiessspiel zu programmieren, wobei sich 2 türme mit kugeln abschiessen.. aber irgendwie fliegt die kugel nich in einer eleganten kurve sondern ruckelt.... d.h. mein spiel stockt irgendwie n bisschen *g* weiß einer wie man das ändern kann? bin noch sehr unerfahren im programmieren, aber ich weiß, dass delay nix bringt Smile

Genauergesagt fliegt die kugel ein stückchen , bleibt einen bruchteil einre sekunde in der luft hängen und fliegt weiter, und das wiederholt sich immer wieder...(sieht man nur wenn man genau hinguckt)

rambo256

BeitragSo, Mai 09, 2004 22:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Code?
dann könnten dir wir vll weiterhelfen...
 

Tarnum

BeitragSo, Mai 09, 2004 22:23
Antworten mit Zitat
Benutzer-Profile anzeigen
öhm, was wollter denn davon sehen? Smile das ganze is immo 7kb groß und wenn ihr euch das durchschauen müsst tut ihr mir irgendwie leid Wink ..

das is meine hauptschleife....


Code: [AUSKLAPPEN]

Repeat

  Tastenabfrage

  flugbahnberechnung

  kollision

  malen
 
  Delay 1

FlushKeys
Flip
Cls
Until KeyHit(1)
End


hm... ich weiß nich was dazu noch wichtig wär... oder kanns stocken, weils zuviele sachen ausrechnen muss an manchen stellen?
 

Tarnum

BeitragSo, Mai 09, 2004 23:01
Antworten mit Zitat
Benutzer-Profile anzeigen
hm, da anscheinend keiner antwortet werde ich wohl doch den kompletten code posten müssen, ok FAST komplett... die globals und sachen laden kann ich ja rauslassen.....

Code: [AUSKLAPPEN]

;HAUPTSCHLEIFE

Repeat




  Tastenabfrage


  flugbahnberechnung


  kollision


  malen
 
  Delay 1


FlushKeys
Flip
Cls
Until KeyHit(1)
End
;||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
;||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||





;funktionen

Function tastenabfrage ()
 
  ;spieler rot
  ;-------------------------------------
  ;leertaste
  If KeyDown (57) And rot_bereit= 1 Then
      rot_speed# = rot_speed# + 0.2
   Else
      If rot_speed# > 2 And rot_bereit = 1 Then
         rot_bereit = 0
         rot_flug_rechnen = 1
         rot_flug_rechnen2 = 1
         chan2 = PlaySound (schuss)
      EndIf   
      If rot_speed# < 2 And rot_bereit = 1 Then rot_speed# = 0
   EndIf
 
   ;up and down
   If KeyDown (208) And rot_wurfw# > 0 And rot_bereit = 1 Then
      rot_wurfw# = rot_wurfw# - 0.5
   EndIf
   
   If KeyDown (200) And rot_wurfw# < 90 And rot_bereit = 1Then
      rot_wurfw# = rot_wurfw# + 0.5
   EndIf

   ;spieler blau
   ;------------------------------------
   ;tab
   If KeyDown(15) And blau_bereit = 1 Then
      blau_speed# = blau_speed# + 0.2
   Else
      If blau_speed# > 2 And blau_bereit = 1 Then
         blau_bereit = 0
         blau_flug_rechnen = 1
         blau_flug_rechnen2 = 1
         chan1 = PlaySound (schuss)
      EndIf   
      If blau_speed# < 2 And blau_bereit = 1 Then blau_speed# = 0
   EndIf

   ;up and down
   If KeyDown (17) And blau_wurfw# < 90 And blau_bereit = 1 Then
      blau_wurfw# = blau_wurfw# + 0.5
   EndIf
   
   If KeyDown (31) And blau_wurfw# > 0 And blau_bereit = 1Then
      blau_wurfw# = blau_wurfw# - 0.5
   EndIf



End Function






;-------------------------------------------------------------------------------





Function flugbahnberechnung()

   ;spieler rot
   If rot_flug_rechnen = 1 Then
      If rot_flug_rechnen2 = 1 Then
         rot_vx# = rot_speed# * Cos(rot_wurfw#)
         rot_vy# = rot_speed# * Sin(rot_wurfw#)
         rot_flug_rechnen2 = 0
      EndIf
 
      rot_sx# = rot_sx# + rot_vx# * zeitintervall_dt#
      rot_sy# = rot_sy# + rot_vy# * zeitintervall_dt#

      rot_t# = rot_t# + zeitintervall_dt#
      rot_vy# = rot_vy# - g# * zeitintervall_dt#
   EndIf
 
     



   ;spieler blau
   If blau_flug_rechnen = 1 Then
      If blau_flug_rechnen2 = 1 Then
         blau_vx# = blau_speed# * Cos(blau_wurfw#)
         blau_vy# = blau_speed# * Sin(blau_wurfw#)
         blau_flug_rechnen2 = 0
         
      EndIf
 
      blau_sx# = blau_sx# - blau_vx# * zeitintervall_dt#
      blau_sy# = blau_sy# + blau_vy# * zeitintervall_dt#

      blau_t# = blau_t# + zeitintervall_dt#
      blau_vy# = blau_vy# - g# * zeitintervall_dt#
   EndIf

End Function




;---------------------------------------------------------------------------------



Function kollision()

    ;kugel spieler rot + boden ; rot + rechter rand
    If ImagesCollide (kugel, rot_sx#+rot_t#  +45+ 70*Sin(90-rot_wurfw#) -5,rot_sy#-2*rot_sy# +570-70*Sin(rot_wurfw#) - 5,0,underground,1,400,0) Or rot_sx# + rot_t# +80 > 800Then
      rot_speed# = 0
      rot_bereit = 1
      rot_flug_rechnen = 0
      rot_sx# = 0
      rot_sy# = 0
      rot_t# = 0
      rot_vy# = 0
    EndIf

    ;kugel spieler rot + bunker blau
    If ImagesCollide (kugel, rot_sx#+rot_t#  +45+ 70*Sin(90-rot_wurfw#) -5,rot_sy#-2*rot_sy# +570-70*Sin(rot_wurfw#) - 5,0,bunker_blau , 720 , 540,0) Then
      sieger$ = "Spieler Rot hat das Match gewonnen"
      Color 255,0,0
      ende       
    EndIf

   


     
    ;kugel spieler blau + boden ; blau + linker rand
    If ImagesCollide (kugel, blau_sx#-blau_t#  +755- 70*Sin(90-blau_wurfw#) +5 , blau_sy#-2*blau_sy# +570-70*Sin(blau_wurfw#) - 5,0,underground,1,400,0) Or blau_sx#-blau_t#  +755- 70*Sin(90-blau_wurfw#) +5 < 0Then
      blau_speed# = 0
      blau_bereit = 1
      blau_flug_rechnen = 0
      blau_sx# = 0
      blau_sy# = 0
      blau_t# = 0
      blau_vy# = 0
    EndIf

    ;kugel blau + bunker rot
    If ImagesCollide (kugel, blau_sx#-blau_t#  +755- 70*Sin(90-blau_wurfw#) +5 , blau_sy#-2*blau_sy# +570-70*Sin(blau_wurfw#) - 5,0, bunker_rot , 10 , 540,0) Then
      sieger$ = "Spieler Blau hat das Match gewonnen"
      Color 0,0,255
      ende
    EndIf



End Function


;----------------------------------------------------------------------------------



Function malen()

   DrawImage hinderground , 1, 1
   DrawImage underground , 1 , 400
   

   DrawImage bunker_rot , 10 , 540
   If rot_flug_rechnen = 1 Then DrawImage kugel, rot_sx#+rot_t#  +45+ 70*Sin(90-rot_wurfw#) -5 , rot_sy#-2*rot_sy# +570-70*Sin(rot_wurfw#) - 5
   Color 255,0,0
   Line 45,570, 45+ 70*Sin(90-rot_wurfw#), 570-70*Sin(rot_wurfw#)
   
   Text 40,1,Int(rot_speed#)



   If blau_flug_rechnen = 1 Then DrawImage kugel, blau_sx#-blau_t#  +755- 70*Sin(90-blau_wurfw#) -5 , blau_sy#-2*blau_sy# +570-70*Sin(blau_wurfw#)  -5
   Color 0,0,255
   Line 755,570, 755-70*Sin(90-blau_wurfw#), 570-70*Sin(blau_wurfw#)
   DrawImage bunker_blau , 720 , 540
   
   Text 760,1,Int(blau_speed#)


End Function

;-----------------------------------------------------------------------------------

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragSo, Mai 09, 2004 23:53
Antworten mit Zitat
Benutzer-Profile anzeigen
wenn eigendlich alles geht mit der flugbahn und es nur so zwischendurch ruckelt, liegt das evetuell am fenstermodus
also vollbild nehmen !
und den Debugger mal ausschalten,!
Dann könnte es beim zeichnen durch die Floats auch zu Problemen kommen , bin mir aber nicht sicher!
besser ist es wenn du mit
Drawimage kugel , Int(x#),int (Y#)
zeichnest
bei imagecollie ist es das gleiche ...
versuch das erst mal,
[BB2D | BB3D | BB+]
 

Tarnum

BeitragMo, Mai 10, 2004 0:06
Antworten mit Zitat
Benutzer-Profile anzeigen
hm irgendwie ommt imemr, wenn ich graphics 800,600,1,1 einstelle : unable to set graphics mode..

weiß einer warum?
 

YellowRider2

Gast

BeitragMo, Mai 10, 2004 0:09
Antworten mit Zitat
Die 3. Variable ist die Farbtiefezahl. Es sind nur 0,16,24 und 32 möglich.
 

ZaRaK

BeitragMo, Mai 10, 2004 0:12
Antworten mit Zitat
Benutzer-Profile anzeigen
mach ma
Code: [AUSKLAPPEN]

graphics 800,600,16,1
 

YellowRider2

Gast

BeitragMo, Mai 10, 2004 0:15
Antworten mit Zitat
Meinte ich doch...
 

Tarnum

BeitragMo, Mai 10, 2004 0:15
Antworten mit Zitat
Benutzer-Profile anzeigen
ah vielen dank, jetzt hab ich alles mit Ints versehen und vollbild... und wie ich es mit meinen müden augen sehen kann, ruckelts nichmehr Smile
 

zocker2150

BeitragMo, Mai 10, 2004 17:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich würde mal den Cls befehl net nach Flip setzten sondern am Anfang vom Programm/Hauptschleife!

Gossi

BeitragMo, Mai 10, 2004 19:26
Antworten mit Zitat
Benutzer-Profile anzeigen
ob cls nun am ende oder am anfang der hauptschleife steht ist doch egal. hauptsache es wird zwischen flip und dem nächsten Bild aufgerufen.
Alle Wasser laufen ins Meer, doch wird das Meer nicht voller; an den Ort, dahin sie fließen, fließen sie immer wieder. (...) Was geschehen ist, eben das wird hernach sein. Was man getan hat, eben das tut man hernach wieder, und es geschieht nichts neues unter der Sonne. Geschieht etwas, von dem man sagen könnte: "Sieh, das ist neu"? Es ist längst vorher auch geschehen in den Zeiten, die vor uns gewesen sind.
 

zocker2150

BeitragMo, Mai 10, 2004 19:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Aber nicht nach FLIP!

Garfield

BeitragMo, Mai 10, 2004 21:31
Antworten mit Zitat
Benutzer-Profile anzeigen
doch, nach Flip
damit der HintergrundBuffer gelöscht wird
 

zocker2150

BeitragDi, Mai 11, 2004 1:35
Antworten mit Zitat
Benutzer-Profile anzeigen
lol wieso willste den den löschen? den sieht man doch eh net????
Cls löscht das gerade aktuelle "Bild".

BladeRunner

Moderator

BeitragDi, Mai 11, 2004 2:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Zocker- bitte red kein dummes Zeug.
Cls löscht den aktiven Buffer. Wenn also (was wünschenswert ist) setbuffer backbuffer() gesetzt ist, wird logischerweise auch der Backbuffer gelöscht, während der Frontbuffer unverändert auf dem screen zu sehen ist. Daher kann bei Double-buffering durchaus das Cls nach dem Flip kommen. Spielt wirklich keine große Rolle ob zu Beginn der Hauptschleife oder nach dem Flip.

Wer´s nit glaubt solls ausprobieren... Rolling Eyes
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92
 

dubitat

BeitragMi, Mai 12, 2004 17:01
Antworten mit Zitat
Benutzer-Profile anzeigen
mal ein beispiel um das zu unterstreichen was bladerunner gesagt hat:

Code: [AUSKLAPPEN]

repeat
...
flip
cls
until keydown(1)


so sieht das ja ganz gut aus!

wenn jetzt die bedingung nicht erfüllt ist springt er wieder an den anfang der schleife! das wäre genau das selbe wie:

Code: [AUSKLAPPEN]

repeat
cls
...
flip
until keydown(1)


ist doch logisch oder? das ganze würde nur einen bruchteil von einer sekunde ausmachen, der mit dem menschlichen auge nicht wahrnehmbar ist!
Erare humanum est - Irren ist Menschlich

Blatolo

BeitragMi, Mai 12, 2004 17:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Da kann das Auge noch so gut sein man wird nie nen unterschied bemerken, da man ja schlecht den backbuffer sehen kann;)
Und nur der wird gelöscht.
Der einzige unterschiede wäre beim ersten und letzten durchlauf, da es bis zum ersten flip länger dauern würde wenn das cls am anfang ist aber nach dem flip wäre schneller aus der schleife da kein cls folgt, aber die zeit die ein cls braucht ist verschwindend gering.

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group