Lade Balcken am Anfang

Übersicht BlitzBasic Beginners-Corner

Gehe zu Seite Zurück  1, 2

Neue Antwort erstellen

Ana

BeitragMi, Dez 15, 2010 17:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Du könntest auch eine liste aus strings machen mit den imagenamen, eine funktion die einen Type erstellt der einen namen/ eine nummer und ein image beinhaltet und einen Baum der die schon geladenen images enthält und nach den nummern/namen sortiert. Jeden schleifendurchlauf kannst du dann den ersten namen einlesen, das image laden und in dem baum speichern und den eintrag aus der liste entfernen. So ist das ganze nicht so hardcode mäßig, allerdings ist es natürlich ein wenig langsamer beim laden, aber wenn du eh ein spiel nebenherlaufen lassen willst, macht das nicht den unterschied. Allerdings musst du die bilder eventull sehr klein halten oder aber in kleine zerlegen und dann wieder zusammensetzen, damit du auch noch auf eine erträgliche framerate kommst. Ich würde mir das aus dem kopf schlagen und die energie lieber drauf verwenden deinen code zu durchforsten warum das so lange dauert.

Z.b Wenn du 3D programmierst und viele Collisionsobjekte hast, schalt die Collision erst ein wenn du fertig geladen hast usw.
Don't only practice your art,
but force your way into its secrets,
for it and knowledge
can raise human to divine
 

primero

BeitragMi, Dez 15, 2010 18:38
Antworten mit Zitat
Benutzer-Profile anzeigen
kommt drauf an. Wenn ich eine menge Bilder zu laden habe mach ich es immer in einer Schleife, bin dann in der menge auch unabhängiger, und bisher hatte ich keine probleme damit.

obs nun mit einem Spiel inerhalb der Schleife geht ... hab es bislang noch nicht versucht. sollte aber, wenn es nichts großes ist, gehen.

Die Bilder werden schließlich jeweils nur einmal geladen.

Tankbuster

BeitragMi, Dez 15, 2010 18:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
Z.b Wenn du 3D programmierst und viele Collisionsobjekte hast, schalt die Collision erst ein wenn du fertig geladen hast usw.

Sry, Ana, aber wenn man UpdateWorld nur kurz rausnimmt, kann es schon diesen "durchflieg"-Effekt geben...

Man könnte das Spiel doch auch partieren. Zwischendrin an passenden Stellen halt mal einen Ladebildschirm einbaun, die alten, unbrauchbaren Sachen löschen, und die neuen laden. Aber eigentlich hab ich noch keine Blitz-Spiele gesehn, die auf sowas zurückgreifen mussten. Wenn man alles speicherschonend programmiert, und keine 2056x2056 Texturen verwendet, ist das doch alles kein Problem.

Wer einen kleinen Ladebalken haben will, dem würde ich empfehlen das so zu machen
Code: [AUSKLAPPEN]

Bilder_laden()
Ladebalken=Ladebalken+10
Modelle_laden()
Ladebalken=Ladebalken+10
Types_erstellen()
Ladebalken=Ladebalken+10
Texte_laden()
Ladebalken=ladebalken+10
Umgebung_erstellen()
Ladebalken=Ladebalken+10
[...]

Der Ladebalken läuft dann zwar nicht so flüssig, aber es ist immerhin praktisch, klaut nicht unnötig Zeit, und man strukturiert alles automatisch besser.

Mein Vorschlag Smile
Twitter
Download Jewel Snake!
Windows|Android

BB-Freak

BeitragDo, Dez 16, 2010 19:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Also ich habs mal probiert hir das ergebniss :
BlitzBasic: [AUSKLAPPEN]
Graphics 320,240,0,2

.Anfang

SetBuffer BackBuffer()

Type Ball
Field X,Y,Fliegt,Fliegt_Hoch,Rechts,Links,gesch
End Type

Type Ball2
Field X,Y,Fliegt,Fliegt_Hoch,Rechts,Links,gesch
End Type

Ball_Zeit=1100

Ball2_Zeit=2000

SeedRnd MilliSecs()


Repeat
Cls

HidePointer
Color 0,255,0
Rect MouseX()-20,MouseY()-5,40,10

If MilliSecs()>trmBall+Ball_Zeit Then
trmBall=MilliSecs()
Ball_Zeit=Ball_Zeit-10
Ball_Blau.Ball = New Ball
EndIf

If MilliSecs()>trmBall2+Ball2_Zeit Then
trmBall2=MilliSecs()
Ball_Zeit2=Ball2_Zeit-10
Ball2_Rot.Ball2 = New Ball2
EndIf
Color 0,255,0
Text 10,10,Punkte
Text 10,25,Text_1$

For Ball_Blau.Ball = Each Ball
Ball_Blau\gesch=1
Color 0,0,255
If Ball_Blau\Rechts Then
If MilliSecs()>trmBall_R+10 Then
trmBall_R=MilliSecs()
Ball_Blau\X=Ball_Blau\X+3
EndIf
EndIf
If Ball_Blau\Links Then
If MilliSecs()>trmBall_L+10 Then
trmBall_L=MilliSecs()
Ball_Blau\X=Ball_Blau\X-3
EndIf
EndIf
If Ball_Blau\X=0 Then
Ball_Blau\X=Rnd(15,305)
EndIf
If Ball_Blau\Y=0 Then
Ball_Blau\Fliegt=1
EndIf
If Ball_Blau\Fliegt=1 Then
Ball_Blau\Y=Ball_Blau\Y+Rnd(1,2)
EndIf
Oval Ball_Blau\X,Ball_Blau\Y,10,10
If RectsOverlap(Ball_Blau\X,Ball_Blau\Y,10,10,MouseX()-20,MouseY()-5,40,10)
If Ball_Blau\Fliegt_Hoch=0 Then
Ball_Blau\gesch=Ball_Blau\gesch+1
EndIf
If Ball_Blau\X>MouseX()-15 And Ball_Blau\X>MouseX()-40 Then
Ball_Blau\Rechts=1
Ball_Blau\Links=0
EndIf
If Ball_Blau\X<MouseX()-10 And Ball_Blau\X<MouseX() Then
Ball_Blau\Links=1
Ball_Blau\Rechts=0
EndIf
Ball_Blau\Fliegt_Hoch=1
EndIf
If Ball_Blau\Fliegt_Hoch=1 Then
Ball_Blau\Y=Ball_Blau\Y-4
If Ball_Blau\X<-1 Then
Ball_Blau\Fliegt_Hoch=0
Ball_Blau\Links=0
Ball_Blau\Rechts=1
EndIf
If Ball_Blau\X>310 Then
Ball_Blau\Fliegt_Hoch=0
Ball_Blau\Links=1
Ball_Blau\Rechts=0
EndIf
EndIf
If Ball_Blau\Y>240 Then
Delete Ball_Blau.Ball
Punkte=Punkte-1
Text_1$="ops"
ElseIf Ball_Blau\Y<-10 Then
Delete Ball_Blau.Ball
Punkte=Punkte+1
Text_1$="good"
Else
If MilliSecs()>trmBall_B2+1000 Then
trmBall_B2=MilliSecs()
Text_1$=""
EndIf
EndIf
Next

For Ball2_Rot.Ball2 = Each Ball2
Ball2_Rot\gesch=1
Color 255,0,0
If Ball2_Rot\Rechts Then
If MilliSecs()>trmBall2_R+10 Then
trmBall2_R=MilliSecs()
Ball2_Rot\X=Ball2_Rot\X+5
EndIf
Ball2_Rot\Y=Ball2_Rot\Y-2
EndIf
If Ball2_Rot\Links Then
If MilliSecs()>trmBall2_L+10 Then
trmBall2_L=MilliSecs()
Ball2_Rot\X=Ball2_Rot\X-5
EndIf
Ball2_Rot\Y=Ball2_Rot\Y-2
EndIf
If Ball2_Rot\X=0 Then
Ball2_Rot\X=Rnd(15,305)
EndIf
If Ball2_Rot\Y=0 Then
Ball2_Rot\Fliegt=1
EndIf
If Ball2_Rot\Fliegt=1 Then
Ball2_Rot\Y=Ball2_Rot\Y+Rnd(3,4)
EndIf
Oval Ball2_Rot\X,Ball2_Rot\Y,10,10
If RectsOverlap(Ball2_Rot\X,Ball2_Rot\Y,10,10,MouseX()-20,MouseY()-5,40,10)
If Ball2_Rot\Fliegt_Hoch=0 Then
Ball2_Rot\gesch=Ball2_Rot\gesch+1
EndIf
If Ball2_Rot\X>MouseX()-15 And Ball2_Rot\X>MouseX()-40 Then
Ball2_Rot\Rechts=1
Ball2_Rot\Links=0
EndIf
If Ball2_Rot\X<MouseX()-10 And Ball2_Rot\X<MouseX() Then
Ball2_Rot\Links=1
Ball2_Rot\Rechts=0
EndIf
Ball2_Rot\Fliegt_Hoch=1
EndIf
If Ball2_Rot\Fliegt_Hoch=1 Then
Ball2_Rot\Y=Ball2_Rot\Y-5
If Ball2_Rot\X<-1 Then
Ball2_Rot\Fliegt_Hoch=0
Ball2_Rot\Links=0
Ball2_Rot\Rechts=1
EndIf
If Ball2_Rot\X>310 Then
Ball2_Rot\Fliegt_Hoch=0
Ball2_Rot\Links=1
Ball2_Rot\Rechts=0
EndIf
EndIf
If Ball2_Rot\Y>240 Then
Delete Ball2_Rot.Ball2
Punkte=Punkte-5
Text_1$="ops"
ElseIf Ball2_Rot\Y<-10 Then
Delete Ball2_Rot.Ball2
Punkte=Punkte+10
Text_1$="good"
Else
If MilliSecs()>trmBall_R2+1000 Then
trmBall_R2=MilliSecs()
Text_1$=""
EndIf
EndIf
Next

CreateBar(100, 100, 100, r = 225, g = 100, b = 100)
Percent=Percent+1
If Percent=100 Then
;End
EndIf

Flip
Until KeyDown(1)

Function CreateBar(Percent, posx, posy, r = 255, g = 255, b = 255)

Locate posx, posy ;Positionieren

Local pos = posx ;Variable festlegen

Local ladebalkenlaenge = 1

For x = 0 To Percent ;Solange kästen zeichnen, wie prozent da sind

Color r, g, b

Rect pos, posy, ladebalkenlaenge, 12, 1

Color r + 25, g + 25, b + 25

Rect posx - 1, posy - 1, (ladebalkenlaenge * 100 + 2), 14, 0 ;malt ein umrandungsrechteck

pos = pos + ladebalkenlaenge

Color 255, 255, 255

Next

End Function


Wirklich funktionieren tut das net Sad
Ich versteh das mit dem Beitrag von CO2 irgend wie net sry Embarassed
Suche einfach eine perfekte kombi Laughing

Ich will versuchen das Spiel in einer Schleife auszuführen und die Loadimages in eine Funktion packen wär das möglich ???
 

CO2

ehemals "SirMO"

BeitragFr, Dez 17, 2010 15:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Uhh, sry im FunktionsCode ist auch ein Fehler Embarassed , so müsste er richtig lauten:

BlitzBasic: [AUSKLAPPEN]
Function CreateBar(Percent, posx, posy, ladebalkenlaenge, r = 255, g = 255, b = 255)

Locate posx, posy

Local pos = posx

For x = 0 To Percent

Color r, g, b

Rect pos, posy, ladebalkenlaenge, 12, 1

Color r + 25, g + 25, b + 25

Rect posx - 1, posy - 1, (ladebalkenlaenge * 100 + ladebalkenlaenge + 2), 14, 0

pos = pos + ladebalkenlaenge

Color 255, 255, 255

Next

End Function



Dazu noch ein Beispiel:

BlitzBasic: [AUSKLAPPEN]
Graphics 800, 600, 32, 3

SetBuffer BackBuffer()

Function CreateBar(Percent, posx, posy, ladebalkenlaenge, r = 255, g = 255, b = 255)

Locate posx, posy

Local pos = posx

For x = 0 To Percent

Color r, g, b

Rect pos, posy, ladebalkenlaenge, 12, 1

Color r + 25, g + 25, b + 25

Rect posx - 1, posy - 1, (ladebalkenlaenge * 100 + ladebalkenlaenge + 2), 14, 0

pos = pos + ladebalkenlaenge

Color 255, 255, 255

Next

End Function

Global geladen = 0

Global FPS = CreateTimer(60)

Global durchlaeufe

Repeat

WaitTimer(FPS)
Cls

CreateBar(geladen, 100, 100, 3)

Text 100, 200, "Geladen: " + geladen + "%"

geladen = geladen + 1

If geladen > 100 Then

geladen = 100

EndIf

Flip

Until KeyHit(1)

End


Hier füllt sich der Ladebalken pro durchlauf um 1 einheit. Du müsstest halt "geladen" beim laden der Bilder verändern, weiß aber nicht ob das funktioniert...
mfG, CO²

Sprachen: BlitzMax, C, C++, C#, Java
Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti
  • Zuletzt bearbeitet von CO2 am Sa, Dez 18, 2010 17:17, insgesamt einmal bearbeitet

BB-Freak

BeitragSa, Dez 18, 2010 12:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Ahh ok
Danke vielmals

hat irgend jemand ne Idee wie man die Bilder in einer Funktion laden kann ?
 

Sterbendes Lüftlein

BeitragSa, Dez 18, 2010 12:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Text entfernt

Ana

BeitragSa, Dez 18, 2010 12:55
Antworten mit Zitat
Benutzer-Profile anzeigen
genau das hab ich doch oben lang und breit beschrieben? also wie man es hinbekommt, dass die images global geladen werden, ohne das man jeweils eine eigene globale variable deklarieren muss und zum kann man das ganze dann in einzelschritten machen udn nebenbei was tun. unter den vorraussetzungen kann man das natürlich auch in eine funktion tun.
Don't only practice your art,
but force your way into its secrets,
for it and knowledge
can raise human to divine
 

Sterbendes Lüftlein

BeitragSa, Dez 18, 2010 13:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Text entfernt

BB-Freak

BeitragMi, Dez 22, 2010 20:08
Antworten mit Zitat
Benutzer-Profile anzeigen
okey sry meine Frage vocher war überflüssig

Aber ich hab keine Ahnung wie ich Ana's Bsp. umsetzen soll Embarassed .
Ich bin wohl einfach zu schlecht Wink .

Ana

BeitragDo, Dez 23, 2010 0:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Hey Kopf hoch, das ist auch schon nicht mehr ganz einfach, aber die ganze idee ist nicht so leicht, zumindest nicht in BB, eventuell das auf später verschieben Smile

Hat nen Grund warum ich nur den Gedanken, nicht die Umsetzung geschrieben hab, das wäre viel zu viel Very Happy
Don't only practice your art,
but force your way into its secrets,
for it and knowledge
can raise human to divine

Gehe zu Seite Zurück  1, 2

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group