Grafiken Flackern

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Oli27

Betreff: Grafiken Flackern

BeitragMi, Jun 07, 2006 22:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Servus,

Also hab ei Problem undzwar Flackern meine grafiken immer wenn eine MilliSecs() abgelaufen ist aber warum ?

hier mal mein ganzer code (die Millisecs die ich mein is die bei "; falls Typ 1" und "; falls Typ 2"

BlitzBasic: [AUSKLAPPEN]
Graphics 800, 600, 16, 2
SetBuffer BackBuffer()


Global bg_gfx = LoadImage ("data\gfx\bg.png")
Global player_gfx = LoadImage ("data\gfx\player.png")
Global stamm_gfx = LoadImage ("data\gfx\stamm.png")

Global playerx = 380
Global playery = 0
Global anzahl = 1
Global baumtime = MilliSecs()
Global baumtime2 = MilliSecs()
Global baumtime3 = MilliSecs()
Global SchleifenZeit

Global rauf = 200
Global runter = 208
Global rechts = 205
Global links = 203

Global baum.stamm
Type stamm
Field x#
Field y#
Field xs#
Field typ
End Type


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

newBaumstamm(0)
newBaumstamm(1)

Repeat
StartZeit = MilliSecs()
Cls

TileBlock bg_gfx


Steuerung()
baumstamm()


DrawImage player_gfx, playerx, playery

Steuerung()
baumstamm()


Flip
SchleifenZeit = MilliSecs() - Startzeit
Until KeyHit(1)
End

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

Function Steuerung()

If KeyHit(rauf) Then playery = playery - 49
If KeyHit(runter) Then playery = playery + 49
If KeyHit(rechts) Then playerx = playerx + 49
If KeyHit(links) Then playerx = playerx - 49

End Function

;------------------------------
Function newBaumstamm(typ)

For i = 1 To 1
baum.stamm = New stamm
baum\typ = typ
baum\x# = Rnd (899, 900)
Next

End Function

;------------------------------
Function baumstamm()
For baum.stamm = Each stamm

Select baum\typ
Case 0
baum\x# = baum\x# - SZ#(0.12)
baum\y# = 50
Case 1
baum\x# = baum\x# - SZ#(0.1)
baum\y# = 100
End Select

; falls Typ 1 ist
If baum\typ = 0 Then
DrawImage stamm_gfx, baum\x#, baum\y#

If MilliSecs() - baumtime > 1000 Then
newBaumstamm(0)
baumtime = MilliSecs()
EndIf

If baum\x# <= - 150 Then
BaumLoeschen = True
EndIf
EndIf

; falls Typ 2 ist
If baum\typ = 1 Then
DrawImage stamm_gfx, baum\x#, baum\y#

If MilliSecs() - baumtime2 > 1000 Then
newBaumstamm(1)
baumtime2 = MilliSecs()
EndIf

If baum\x# <= - 150 Then
BaumLoeschen = True
EndIf
EndIf

If BaumLoeschen Then Delete Baum.Stamm

BaumLoeschen = False
Next
End Function



Function SZ#(Bewegung#)

Wert# = Bewegung# * SchleifenZeit
Return Wert#

End Function

BladeRunner

Moderator

BeitragDo, Jun 08, 2006 6:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Den Fehler direkt hab ich nicht gefunden, aber:

Arrow Du rufst in deiner Mainloop 2* die Funktionen "Steuerung" und Baumstamm auf. Wieso? Einmal reicht doch vollkommen.
Arrow in newbaumstamm() machst Du ne for next von 1 bis 1. Die ist überflüssig.
Arrow in Baumstamm() prüfst Du erst mit select-case auf den Typ, machst aber hinterher getrennt nochmal ne Abfrage. Auch das ist überflüssig. Pack alles einen Typ betreffende in die passende Case rein. Bei der Gelegenheit würde ich auch alles was sowieso bei beiden Typen identisch läuft nach der Select ausführen lassen (Baum zeichnen, Baum löschen...)
Arrow Du gibst baum\y in ebenjener case einen konstanten Wert. in jedem Schleifendurchlauf aufs neue. Da sich dieser Wert nicht ändert, wäre meine Empfehlung ihn einmal bei erstellen des Baumes in newbaumstamm() festzulegen.
Arrow Du setzt baumlöschen auf true um dann in der selben Schleife zu löschen. Prüf ob der Baum zu löschen ist und tu es direkt. Den Umweg über eine Variable braucht es nur wenn vor dem Löschen noch was mit dem Type passiert (weitere Überprüfungen oder so. Aber das lässt sich in der Regel auch vorher lösen ...)
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

Lunatix

BeitragDo, Jun 08, 2006 9:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Äh das war ich BladeRunner Laughing

Aber wenn er bei fall eins den baum löscht wird er einen "Object does not exist" - MAV bekommen, da er mit if noch den typ abfragt.

Exit würde die grafiken zum flackern bringen.
[size=9]Pro|gram|mier|er: Ein Organismus, der Koffein in Software umwandelt.
Geben Sie eine beliebige 11-stellige Primzahl ein, um fortzusetzen...
 

Oli27

BeitragDo, Jun 08, 2006 11:57
Antworten mit Zitat
Benutzer-Profile anzeigen
BladeRunner hat Folgendes geschrieben:
Den Fehler direkt hab ich nicht gefunden, aber:
Arrow Du gibst baum\y in ebenjener case einen konstanten Wert. in jedem Schleifendurchlauf aufs neue. Da sich dieser Wert nicht ändert, wäre meine Empfehlung ihn einmal bei erstellen des Baumes in newbaumstamm() festzulegen.
Arrow Du setzt baumlöschen auf true um dann in der selben Schleife zu löschen. Prüf ob der Baum zu löschen ist und tu es direkt. Den Umweg über eine Variable braucht es nur wenn vor dem Löschen noch was mit dem Type passiert (weitere Überprüfungen oder so. Aber das lässt sich in der Regel auch vorher lösen ...)


baum\y ändert seien wert aber in jedem Typ ... Typ1 ist er 50 und bei typ 2 100

Und das baumlöschen geht nicht wirklich anders da er immer das sagt was junkproger geschrieben hat.

Nur leider hat das auch nicht mein flacker Problem behoben .... es taucht immer auf wen ein neuer stamm nach 2sec erstellt wird also muss es ja irgendwie an der Millisecs liegen

hier nochmal der jetzige code ....

BlitzBasic: [AUSKLAPPEN]
Graphics 800, 600, 16, 2
SetBuffer BackBuffer()


Global bg_gfx = LoadImage ("data\gfx\bg.png")
Global player_gfx = LoadImage ("data\gfx\player.png")
Global stamm_gfx = LoadImage ("data\gfx\stamm.png")

Global playerx = 380
Global playery = 0
Global anzahl = 1
Global baumtime = MilliSecs()
Global baumtime2 = MilliSecs()
Global SchleifenZeit

Global rauf = 200
Global runter = 208
Global rechts = 205
Global links = 203

Global baum.stamm
Type stamm
Field x#
Field y#
Field xs#
Field typ
End Type


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

newBaumstamm(0)
newBaumstamm(1)

Repeat
StartZeit = MilliSecs()
Cls

TileBlock bg_gfx

DrawImage player_gfx, playerx, playery

Steuerung()
baumstamm()


Flip
SchleifenZeit = MilliSecs() - Startzeit
Until KeyHit(1)
End

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

Function Steuerung()

If KeyHit(rauf) Then playery = playery - 49
If KeyHit(runter) Then playery = playery + 49
If KeyHit(rechts) Then playerx = playerx + 49
If KeyHit(links) Then playerx = playerx - 49

End Function

;------------------------------
Function newBaumstamm(typ)

baum.stamm = New stamm
baum\typ = typ
baum\x# = Rnd (899, 900)

End Function

;------------------------------
Function baumstamm()
For baum.stamm = Each stamm

Select baum\typ
Case 0
baum\x# = baum\x# - SZ#(0.12)
baum\y# = 50

DrawImage stamm_gfx, baum\x#, baum\y#

If MilliSecs() - baumtime > 2000 Then
newBaumstamm(0)
baumtime = MilliSecs()
EndIf

If baum\x# <= - 150 Then
BaumLoeschen = True
EndIf


Case 1
baum\x# = baum\x# - SZ#(0.1)
baum\y# = 100

DrawImage stamm_gfx, baum\x#, baum\y#

If MilliSecs() - baumtime2 > 2000 Then
newBaumstamm(1)
baumtime2 = MilliSecs()
EndIf

If baum\x# <= - 150 Then
BaumLoeschen = True
EndIf
End Select



If BaumLoeschen Then Delete Baum.Stamm

BaumLoeschen = False
Next
End Function


Function SZ#(Bewegung#)

Wert# = Bewegung# * SchleifenZeit
Return Wert#

End Function
 

Oli27

BeitragDo, Jun 08, 2006 15:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok Leute hab den fehler selbst gefunden die ganen Millisecs() dinger (damit alle 2 sec was neues kommt) müssen in die hauptschleife

BladeRunner

Moderator

BeitragDo, Jun 08, 2006 18:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
baum\y ändert seien wert aber in jedem Typ ... Typ1 ist er 50 und bei typ 2 100

Und was hindert dich daran schon beim Erstellen des Baumes y abhängig vom typ festzulegen ?
sprich: if typ = 1 then baum\y = ...

Zudem:
Zitat:
Und das baumlöschen geht nicht wirklich anders da er immer das sagt was junkproger geschrieben hat.


Sorry, aber Bullshit.
Dort wo jetzt steht:
Code: [AUSKLAPPEN]
 If BaumLoeschen Then Delete Baum.Stamm
Baumloeschen = False

... machst Du ein :
Code: [AUSKLAPPEN]
if baum\x <-150 then delete baum

hin.
(Gäbe es einen Unterschied bei den X-Werten wäre es noch eher ein Problem, und selbst dann ginge es anders.)

Mal ab davon dass es die Type-deleted-Problematik nicht gäbe wenn alles in einer select-case abgehandelt wäre wie ich es oben vorschlug....
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
 

Oli27

BeitragDo, Jun 08, 2006 18:55
Antworten mit Zitat
Benutzer-Profile anzeigen
BladeRunner hat Folgendes geschrieben:

Mal ab davon dass es die Type-deleted-Problematik nicht gäbe wenn alles in einer select-case abgehandelt wäre wie ich es oben vorschlug....


ist doch alles in einer select case .... oder nicht ?

BladeRunner

Moderator

BeitragDo, Jun 08, 2006 20:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Harrgott nochama...
---dann mal entgegen meiner Angewohnheiten....

BlitzBasic: [AUSKLAPPEN]
  
Function baumstamm()
For baum.stamm = Each stamm

Select baum\typ
Case 0
baum\x# = baum\x# - SZ#(0.12)
; baum\y# = 50 -entfällt, da in newbaumstamm() zu erledigen

If MilliSecs() - baumtime > 2000 Then
newBaumstamm(0)
baumtime = MilliSecs()
EndIf

Case 1
baum\x# = baum\x# - SZ#(0.1)
; baum\y# = 100 siehe oben

If MilliSecs() - baumtime2 > 2000 Then
newBaumstamm(1)
baumtime2 = MilliSecs()
EndIf

End Select
DrawImage stamm_gfx, baum\x#, baum\y#
; reicht einmal , da bei beiden gleich.


If Baum\x <=- 150 Then Delete Baum.Stamm

Next


so, geht doch.
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
 

Oli27

BeitragDo, Jun 08, 2006 20:49
Antworten mit Zitat
Benutzer-Profile anzeigen
BladeRunner hat Folgendes geschrieben:
Harrgott nochama...
---dann mal entgegen meiner Angewohnheiten....

BlitzBasic: [AUSKLAPPEN]
  
Function baumstamm()
For baum.stamm = Each stamm

Select baum\typ
Case 0
baum\x# = baum\x# - SZ#(0.12)
; baum\y# = 50 -entfällt, da in newbaumstamm() zu erledigen

If MilliSecs() - baumtime > 2000 Then
newBaumstamm(0)
baumtime = MilliSecs()
EndIf

Case 1
baum\x# = baum\x# - SZ#(0.1)
; baum\y# = 100 siehe oben

If MilliSecs() - baumtime2 > 2000 Then
newBaumstamm(1)
baumtime2 = MilliSecs()
EndIf

End Select
DrawImage stamm_gfx, baum\x#, baum\y#
; reicht einmal , da bei beiden gleich.


If Baum\x <=- 150 Then Delete Baum.Stamm

Next


so, geht doch.


sei nich gleich so genervt Laughing und ich lass es bei meiner art ^^

BladeRunner

Moderator

BeitragDo, Jun 08, 2006 22:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Tu das, bleib bei Doppelzuweisungen und unnötig aufgeblasenem Code ...
Wer keine Hilfe will... Confused
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
 

Oli27

BeitragDo, Jun 08, 2006 22:20
Antworten mit Zitat
Benutzer-Profile anzeigen
BladeRunner hat Folgendes geschrieben:
Tu das, bleib bei Doppelzuweisungen und unnötig aufgeblasenem Code ...
Wer keine Hilfe will... Confused


ich möchte ja hilfe ... aber man muss ja nich immer genau das machen was einem gesagt wird oder Wink

BladeRunner

Moderator

BeitragFr, Jun 09, 2006 7:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Muss man nicht. Tu er wie er will.
Ich würde mir nur Gedanken darüber machen ob es sinnvoll ist schlankeren Code abzulehnen.
Aber das Thema ist für mich beendet.
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

Lunatix

BeitragFr, Jun 09, 2006 8:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Oli nu aber! Blades CodeForm war wirklich besser.
Er hats niur gut gemeint, und du kannst glück haben, das er dein Code umgeschrieben hat, sowas macht er nähmlich nicht gerne Wink
[size=9]Pro|gram|mier|er: Ein Organismus, der Koffein in Software umwandelt.
Geben Sie eine beliebige 11-stellige Primzahl ein, um fortzusetzen...
 

Oli27

BeitragFr, Jun 09, 2006 11:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Man das doch das gleiche blos das der Y wert raus is ...sonst hab ichs doch so

BladeRunner

Moderator

BeitragFr, Jun 09, 2006 12:07
Antworten mit Zitat
Benutzer-Profile anzeigen
es ist nicht das gleiche, nur vom Outcome.
Der Code ist schlanker (y-Zuweisung weg, Drawimage reduziert, eine überflüssige Variable eingespart) und somit - wenn auch nur im Promillebereich- schneller und kürzer.
Aber wie gesagt: Thema erledigt, Du bist Herr Deines Codes.
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

Lunatix

BeitragFr, Jun 09, 2006 12:08
Antworten mit Zitat
Benutzer-Profile anzeigen
args!

du fragst aber 2mal ab das is unnötig!
alles in eine case frage wie bei BR, das ist besser (und auch schneller mein ich)
[size=9]Pro|gram|mier|er: Ein Organismus, der Koffein in Software umwandelt.
Geben Sie eine beliebige 11-stellige Primzahl ein, um fortzusetzen...
 

Oli27

BeitragFr, Jun 09, 2006 12:52
Antworten mit Zitat
Benutzer-Profile anzeigen
ey leute Laughing denkt ich ich hab den code noch der da oben steht Question
Der is doch schon längst geändert Rolling Eyes

versteh auch gar nicht warum BladeRunner jetzt so sauer is Shocked

x-pressive

BeitragMo, Jun 12, 2006 8:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
ich möchte ja hilfe ... aber man muss ja nich immer genau das machen was einem gesagt wird oder

Genau diese "Anfänger-Sturheit", der man jetzt komischerweise immer öfter begegnet (das muß an der Generation liegen), ist der Grund, warum ich z.B. kaum noch im Beginner-Forum helfen möchte. Ich weiss nicht, ob pure Sturheit, Faulheit oder ein zu grosses Ego die Gründe dafür sind, aber wer um Hilfe bittet, sollte für alle Tipps offen sein und sie auch wirklich beherzigen.

Wenn die Tipps von Leuten kommen, die schon seit einem Jahrzehnt programmieren, wird man schon früher oder später merken, das sie vielleicht recht hatten -und das sie meistens etwas weiter vorausblicken, als das ein Anfänger kann.

Aber wer nichts hören will, braucht keine Hilfe und kann mit seinem Problem ja alleine zurechtkommen.
 

Oli27

BeitragMo, Jun 12, 2006 15:43
Antworten mit Zitat
Benutzer-Profile anzeigen
x-pressive hat Folgendes geschrieben:
Aber wer nichts hören will, braucht keine Hilfe und kann mit seinem Problem ja alleine zurechtkommen.


Question

Ich habe alle Tipps dankend angenommenen außer dem mit dem y wert .... meine fresse ihr könnt hier aber auch alles breitlatschen Rolling Eyes

Jan_

Ehemaliger Admin

BeitragMo, Jun 12, 2006 16:22
Antworten mit Zitat
Benutzer-Profile anzeigen
lieber breit als tot

user posted image
between angels and insects

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group