Types zucken
Übersicht

![]() |
N0XBetreff: Types zucken |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi!
Ich habe ein Weltraum Spiel, wo 20 Schiffe erstellt werden. Bei der Abwärtsbewegung jedoch zucken die Bilder der Types. Warum? Code: [AUSKLAPPEN] SeedRnd MilliSecs()
;Variablen Global px = 512 Global py = 700 Global speed = 8 Global gegspeed = 5 Global sx = 536 Global sy = 705 Global points = 0 Global lives = 3 Global geganzahl = 20 Global time = 120 Global stampMin Global stampSec Global timer ;--------------------------------------------------------------------------------------------| Type schuss Field x Field y End Type Type gegner Field x Field y Field image End Type ;--------------------------------------------------------------------------------------------| Graphics 1024,768,32 SetBuffer BackBuffer() Global ttimer = CreateTimer(60) gegner_erstellen() ;--------------------------------------------------------------------------------------------| While Not KeyHit(1) WaitTimer(ttimer) Cls If MilliSecs()-oldtime >= 1000 Then oldtime = MilliSecs() umrechnen() End If Schuss() Bewegen() GegUpdate() PlyUpdate() Flip 0 Wend End ;--------------------------------------------------------------------------------------------| Function Schuss() If KeyHit(57) Then s.Schuss = New schuss s\x = sx s\y = sy PlaySound shot EndIf For s.Schuss = Each Schuss s\y = s\y - speed Rect s\x,s\y,2,5 If s\y < 10 Then Delete s.Schuss Next If Timer < MilliSecs() Then frame =(frame +1)Mod 16 ;Anzahl Bilder timer = MilliSecs() + 100000 ;Pausenzeit End If For s.Schuss = Each Schuss For g.Gegner = Each Gegner If RectsOverlap(g\x,g\y,40,40,s\x,s\y,2,5) Then DrawImage expl,g\x,g\y,frame Delete s.Schuss Delete g.Gegner g.Gegner = New Gegner g\x = Rnd(0,760) g\y = Rnd(-920,-20) g\image = LoadImage("gfx\gegner.png") PlaySound treffer points=points+10 Exit EndIf Next Next End Function Function gegner_erstellen() For a = 0 To geganzahl g.gegner = New gegner g\x = Rnd(0,760) g\y = Rnd(-900,-20) g\image = LoadImage("gfx\gegner.png") MaskImage g\image,255,255,255 Next End Function Function GegUpdate() For upd.gegner = Each gegner DrawImage upd\image, upd\x, upd\y MaskImage upd\image,255,255,255 Next For g.Gegner = Each Gegner g\y = g\y +gegSpeed If g\y > 770 Then g\y=Rnd(-200,-20) g\x=Rnd(0,760) Exit EndIf Next End Function Function PlyUpdate() If px <2 Then px=2 sx=26 EndIf If px >770 Then px=770 sx=786 EndIf For g.Gegner = Each Gegner If (stampMin = 0 And stampSec = 0) Or g\image=False Or lives <= 0 Then Ende() If RectsOverlap(g\x,g\y,40,40,px,py,50,50) Then Delete g.Gegner PlaySound treffer lives=lives-1 Exit EndIf Next End Function Mfg, N0X |
||
Projekte: |Tibario| http://www.blitzforum.de/worklogs/325/ | 5% |
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Der Code sieht sehr übersichtlich aus. Lob!!!
Aber... Die LoadImages müssen alle aus den Funktionen raus und vor der Spielschleife geladen sein. In den Funktionen kannst Du einfach das Handle des einmal geladenen Bildes übergeben: BlitzBasic: [AUSKLAPPEN] GegnerBild = LoadImage("gfx\gegner.png") und dafür in den Funktionen: BlitzBasic: [AUSKLAPPEN] g\image = GegnerBild solange es noch keine zwei unterschiedlichen Gegnerbilder gibt, wäre es sogar ganz ohne g\image möglich: BlitzBasic: [AUSKLAPPEN] Function GegUpdate() gleich mehr... Wozu dient das EXIT in der GegUpdate()? Wo ist den der Code der Funktionen Umrechnen() und Bewegen() ? |
||
- Zuletzt bearbeitet von Midimaster am Sa, Jan 02, 2010 16:42, insgesamt einmal bearbeitet
![]() |
hazumu-kun |
![]() Antworten mit Zitat ![]() |
---|---|---|
Okay, mehrere Sachen:
Erstmal das hier: BlitzBasic: [AUSKLAPPEN]
Du machst 100 SEKUNDEN Pause bis du den Frame wechselst. Wieso? ------------------ BlitzBasic: [AUSKLAPPEN]
Jedesmal wenn du einen Gegner erstellst lädst du das Bild neu, das ist uneffektiv, besser wäre das hier: BlitzBasic: [AUSKLAPPEN]
------------------ Und noch was: BlitzBasic: [AUSKLAPPEN]
Du maskest ein Bild JEDESMAL wenn es gezeichnet wird, du müsstest es nur einmal, nach "Global img_gegner" zum Beispiel, masken. [...]Teil entfernt wegen mangelndem Sinn[...] Gruß, Hazumu-kun. ------------------ EDIT: Mist, zu langsam gewesen! ![]() ------------------ P.S.: Dein Code ist gut lesbar, aber ein paar Kommentare mehr können nicht schaden. Trotzdem dickes Lob von mir! |
||
Warum kann es keine omnipotente Macht geben?
Weil diese omnipotente Macht in der Lage sein müsste, einen so schweren Stein zu schaffen, dass sie ihn nicht heben kann -> nicht omnipotent |
- Zuletzt bearbeitet von hazumu-kun am Sa, Jan 02, 2010 17:36, insgesamt einmal bearbeitet
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
@hazumu kun
Das Umsetzen ist total ok. Er erreicht damit, dass der Gegner, wenn er unten aus dem Bild rausgeflutsch ist, weit oberhalb des Bildschirms mit Zufalls-X wieder eingesetzt wird. Und irgendwann wird er dann sichtbar. So mach ich das immer bei meinen Schneeflocken...Dadurch braucht er das Type-Element nicht erst zu deleten und dann oben wieder herzustellen. |
||
![]() |
hazumu-kun |
![]() Antworten mit Zitat ![]() |
---|---|---|
Trotzdem fehlt der Code zu Bewegen()
Bin sicher das es da liegt. |
||
Warum kann es keine omnipotente Macht geben?
Weil diese omnipotente Macht in der Lage sein müsste, einen so schweren Stein zu schaffen, dass sie ihn nicht heben kann -> nicht omnipotent |
![]() |
N0X |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also in Bewegen sind eig. nur die Tastenabfragen zum Bewegen des Players. Nichts für die Gegner.
Hier trotzdem nochmal der gesamte Code: Code: [AUSKLAPPEN] SeedRnd MilliSecs()
;Variablen Global px = 512 Global py = 700 Global speed = 8 Global gegspeed = 5 Global sx = 536 Global sy = 705 Global points = 0 Global lives = 3 Global geganzahl = 20 Global highscore = 1 Global Ende = 0 Global time = 120 Global stampMin Global stampSec Global timer ;--------------------------------------------------------------------------------------------| Type schuss Field x Field y End Type Type gegner Field x Field y Field image End Type ;--------------------------------------------------------------------------------------------| Graphics 1024,768,32 SetBuffer BackBuffer() ;Laden der Ressourcen Global schiff = LoadImage("gfx\schiff.png") Global side = LoadImage("gfx\sidebar.png") Global expl = LoadAnimImage("gfx\exp1.png",64,64,0,15) Global shot = LoadSound("sound\shot.wav") Global treffer = LoadSound("sound\treffer.wav") Global bgmusic = PlayMusic("sound\bg.wav") Global ggge = LoadImage("gfx\gegner.png") font=LoadFont("Verdana",20) SetFont font ;Vorbereitung der Ressourcen zur Nutzung MaskImage schiff,255,255,255 MaskImage expl,255,255,255 ClsColor 0,0,0 Global ttimer = CreateTimer(60) gegner_erstellen() ;--------------------------------------------------------------------------------------------| While Not KeyHit(1) WaitTimer(ttimer) Cls If MilliSecs()-oldtime >= 1000 Then oldtime = MilliSecs() umrechnen() End If Schuss() Bewegen() Sterne() GegUpdate() PlyUpdate() DrawImage schiff,px,py DrawImage side,824,0 Texte() If Ende=1 Then Exit Flip 0 Wend End ;--------------------------------------------------------------------------------------------| Function Schuss() If KeyHit(57) Then s.Schuss = New schuss s\x = sx s\y = sy PlaySound shot EndIf For s.Schuss = Each Schuss s\y = s\y - speed Rect s\x,s\y,2,5 If s\y < 10 Then Delete s.Schuss Next If Timer < MilliSecs() Then frame =(frame +1)Mod 16 ;Anzahl Bilder timer = MilliSecs() + 100 ;Pausenzeit End If For s.Schuss = Each Schuss For g.Gegner = Each Gegner If RectsOverlap(g\x,g\y,40,40,s\x,s\y,2,5) Then DrawImage expl,g\x,g\y,frame Delete s.Schuss Delete g.Gegner g.Gegner = New Gegner g\x = Rnd(0,760) g\y = Rnd(-920,-20) g\image = ggge PlaySound treffer points=points+10 Exit EndIf Next Next End Function Function Bewegen() If KeyDown(203) Then px=px-3 sx=sx-3 If KeyDown(205) Then px=px+3 sx=sx+3 End Function Function gegner_erstellen() For a = 0 To geganzahl g.gegner = New gegner g\x = Rnd(0,760) g\y = Rnd(-900,-20) g\image = LoadImage("gfx\gegner.png") MaskImage g\image,255,255,255 Next End Function Function GegUpdate() For upd.gegner = Each gegner DrawImage upd\image, upd\x, upd\y MaskImage upd\image,255,255,255 Next For g.Gegner = Each Gegner g\y = g\y +gegSpeed If g\y > 770 Then g\y=Rnd(-200,-20) g\x=Rnd(0,760) Exit EndIf Next End Function Function PlyUpdate() If px <2 Then px=2 sx=26 EndIf If px >770 Then px=770 sx=786 EndIf For g.Gegner = Each Gegner If (stampMin = 0 And stampSec = 0) Or g\image=False Or lives <= 0 Then Ende() If RectsOverlap(g\x,g\y,40,40,px,py,50,50) Then Delete g.Gegner PlaySound treffer lives=lives-1 Exit EndIf Next End Function Function Sterne() For i=0 To 100 Plot Rnd(0,1024),Rnd(0,768) Next End Function Function Texte() If KeyHit(41) Then GetKey() EndIf Text 920,165,+lives Text 920,290,+points Text 880,340, "Zeit: "+stampMin+":"+stampSec End Function Function umrechnen() time = time - 1 stampMin = time/60 stampSec = time - (stampMin * 60) End Function Mfg, N0X |
||
Projekte: |Tibario| http://www.blitzforum.de/worklogs/325/ | 5% |
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
was meinst Du nun mit "Zucken" genau? Hüpfen die zwischen zwei Positionen hin und her (z.b. um2 Pixel) oder läuft da so ein "Bruch" durch, wie man es früher manchmal bei schlechten Fernsehern hatte?
Das Exit ist ja immer noch im GegnerUpdate. Wozu ist es da? |
||
![]() |
Chester |
![]() Antworten mit Zitat ![]() |
---|---|---|
Probiers mal mit Flip 1. | ||
![]() |
N0X |
![]() Antworten mit Zitat ![]() |
---|---|---|
Die "zucken" immer so um 1 bis 2 Pixel nach oben/unten (kann man nicht genau sehen.
Das Exit hab ich nur vergessen raus zu nehmen. (Den Code hab ich aus alten Zeiten rausgekramt ^^) Flip 1 ändert nichts. |
||
Projekte: |Tibario| http://www.blitzforum.de/worklogs/325/ | 5% |
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
bringt es was, wenn man es rausnimmt?
der fehler ist seltsam: Irgendwie scheinen entweder die y-werte deiner gegner an zwei stellen im code verändert zu werden. Oder es werden versehentlich zwei Welten dargestellt. z.b. alles gemalt dann die Gegner bewegt und nochmal gemalt und dann erst der flip werf mal bitte außerdem den neuesten code in deinen ersten beitrag von 15:06 Uhr weitere Ungereimtheiten: Bei mir springt das Programm gleich zu Beginn in die Ende(). Die fehlt aber leider im Code. Was passiert da? Probiers mal mit einem DEBUGLOG wie hier: BlitzBasic: [AUSKLAPPEN] Function PlyUpdate() |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group