spiel stockt?
Übersicht

TarnumBetreff: spiel stockt? |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 ![]() 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code?
dann könnten dir wir vll weiterhelfen... |
||
Tarnum |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
öhm, was wollter denn davon sehen? ![]() ![]() 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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 ;----------------------------------------------------------------------------------- |
||
![]() |
RallimenSieger des 30-EUR-Wettbewerbs |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
hm irgendwie ommt imemr, wenn ich graphics 800,600,1,1 einstelle : unable to set graphics mode..
weiß einer warum? |
||
YellowRider2Gast |
![]() Antworten mit Zitat |
|
---|---|---|
Die 3. Variable ist die Farbtiefezahl. Es sind nur 0,16,24 und 32 möglich. | ||
ZaRaK |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
mach ma
Code: [AUSKLAPPEN] graphics 800,600,16,1 |
||
YellowRider2Gast |
![]() Antworten mit Zitat |
|
---|---|---|
Meinte ich doch... | ||
Tarnum |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 ![]() |
||
zocker2150 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich würde mal den Cls befehl net nach Flip setzten sondern am Anfang vom Programm/Hauptschleife! | ||
![]() |
Gossi |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Aber nicht nach FLIP! | ||
![]() |
Garfield |
![]() Antworten mit Zitat ![]() |
---|---|---|
doch, nach Flip
damit der HintergrundBuffer gelöscht wird |
||
zocker2150 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
lol wieso willste den den löschen? den sieht man doch eh net????
Cls löscht das gerade aktuelle "Bild". |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
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... ![]() |
||
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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. |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group