Am Anfang viele Bilder Laden

Übersicht BlitzBasic Beginners-Corner

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

BB-Freak

Betreff: Am Anfang viele Bilder Laden

BeitragSa, Jan 28, 2012 14:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Liebes Forum,
ich bin jetzt wieder ein bisschen aktiv geworden was Programmieren betrifft. Ich brauche daher ein bisschen Starthilfe Laughing

So mein Problem :

Ich hab mich jetzt wieder an eines meiner Projekte gesetzt und hab festgestellt, dass ich am Anfang imens viele Bilder laden muss -> Grund:
Ich will(wollte), dass der Spieler die Möglichkeit hat verschiedene Sachen anzuziehen. Deshalb hab ich den Spieler bzw. die animierten Bilder auseinander genommen so das alles übereinander gelegt wird ich hab z.B. beim Laufen ein animiertes Bild für die Hose, eins für den Kopf, eins für den Gürtel, eins für die Waffe,...

Jetzt wollte ich fragen, ob es möglich ist das zu vereinfachen Rolling Eyes

ZaP

BeitragSa, Jan 28, 2012 14:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Du musst doch nur die Bilder laden, die auch tatsächlich vom Spieler benutzt werden, oder soll man die On-The-Fly ändern können? In dem Fall kannst Du einfach alle Klamotten + Laufanimation in ein Bild packen, und das dann laden.
Starfare: Worklog, Website (download)

BB-Freak

BeitragSa, Jan 28, 2012 15:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke für die gute Idee ^^ Bis jetzt hab ich die Bilder immer am Anfang alle auf einmal gelanden Idea

Man sollte einzelne Parts On-the-Fly ändern können das heißt :
Der Spieler kauft sich zum Bsp. eine neue Hose und zieht diese an. So jetzt will ich das er sie solange an hat wie er will, das heißt : ich muss das normale Bild seiner Hose in allen Animierten Bilder durch die neue Hose ersetzten oder die alte übermalen.
Weil es total überflüssig währ jede einzelne Kombination von klamotten als extra Bild zu speichern hab ich den Spieler zerstückelt. So dass ich einfach Parts durch neue erstetzten kann. Es macht leider trotzdem noch immer eine Heiden arbeit für jeden Part eine extra Animation zu malen Wink Währe toll wenn das einfacher währ Laughing Hat da jemand ne Idee ?
Und noch eine Frage giebt es auch eine Möglichkeit den Spieler als ganzes zu laden und ihn danach zu zerstückeln Rolling Eyes ?

Xeres

Moderator

BeitragSa, Jan 28, 2012 15:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Am variabelsten bleibt man, wenn man alles in Einzelteilen lädt. Dann braucht man lange, um die ganzen nötigen Strukturen zu schreiben.
Am schnellsten geht es, wenn man sich z.B. auf 2-3 Sets festlegt und nichts anderes zulässt.
Du solltest abwägen, was du willst und was du brauchst. Ein Super-modbares Spiel, was nie fertig wird, ist schlecht.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

ozzi789

BeitragSa, Jan 28, 2012 15:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi BB-Freak

Ich habe mir mal vor längerer Zeit eine Funktion geschrieben welche das angegebene Verzeichniss durchgeht und mir ein BB File erstellt welches ich später ganz einfach per include einbinden kann und mich so nicht um das Laden der Bilder kümmern muss,

Code: [AUSKLAPPEN]

path$="C:\Users\ozzi\Pictures\"
directory = ReadDir(path$)

stream=WriteFile("load.bb")

Repeat
   file$ = NextFile$(directory)
   If file$ = "" Then Exit
   If FileType(path$ + file$) = 1 Then
   WriteLine stream,"gfx_"+Left(file$,Len(file$)-4)+"=LoadImage("+Chr(34)+path$+file$+Chr(34)+")"
   End If
Forever

CloseDir directory
CloseFile stream




Ich würde alle Bilder am Anfang laden, da moderne Systeme gerne mal ein paar MB an Daten verkraften Wink


Das ersetzen würd ich so lösen (oder ähnlich),
so genügt es die Variable player_current_pants_index einfach auf 1 , 2 oder 3 zu setzen und schon hat dein Player andere Hosen an Wink
Code: [AUSKLAPPEN]
Select player_current_pants_index
   Case 1
       player_current_pants=gfx_player_pants_blue
   Case 2
      player_current_pants=gfx_player_pants_red
   Case 3
      player_current_pants=gfx_player_pants_yellow
End Select


DrawImage player_current_pants,x,y




"Es macht leider trotzdem noch immer eine Heiden arbeit für jeden Part eine extra Animation zu malen"
Versteh ich nicht genau.. kannst du das vlt etwas ausführen?


"Und noch eine Frage giebt es auch eine Möglichkeit den Spieler als ganzes zu laden und ihn danach zu zerstückeln Rolling Eyes ?"
Ja mittels GrabImage zB.. würde dir aber davon abraten
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5

BB-Freak

BeitragSa, Jan 28, 2012 15:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok vielen Dank die schnellen und zahlreichen Antworten Very Happy

@ozzi789

Mit dem Heiden Arbeit hab ich gemeint, dass
z.B. ein Animiertes Bild 20Farmes hat(vtl. leicht übertrieben Rolling Eyes ) und ich für jedes neue Kleidungsstück 20Farmes bearbeiten muss Exclamation Und da ich nicht nur ein animiertes Bild hab ...

Midimaster

BeitragSa, Jan 28, 2012 15:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Mal ne Frage.. Wie lange dauert es denn momentan, alle Bilder zu laden? Ich glaube Du fängst Dir durch eine Änderung hier mehr Ärger ein, als wenn Du es so lässt. Bilder laden am Anfang ist ganz normal und der User nimmt es auch hin. Die meisten Spiele überbrücken die Wartezeit mit einem interessanten Startbild/StartSound. Da merkt der User gar nicht, dass Zeit verstreicht....
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe

BB-Freak

BeitragSa, Jan 28, 2012 15:48
Antworten mit Zitat
Benutzer-Profile anzeigen
@Midimaster
Momentan so in etwa 5 sek. denke ich ^^ Von dem her eigentlich kein Problem. Surprised
Nur finde ich das ich so viele Bilder lade, dass ich den überblick verlier Sad und genau da liegt das Problem Exclamation

Vieleicht sollte ich das gesamte Spiel noch mal neu coden aber irgendwie hab ich schon so viel geschrieben und bin schon so weit gekommen, dass ich das eigentlich nicht will Sad
Mal gucken ob ich es schaff den code zu sotieren Exclamation
Was noch dazu kommt ist, dass ich das Spiel mit der kostenlosen Demo Version von BB gecodet hab und das jetzt noch unter Blitz+ zum laufen griegen sollte.
  • Zuletzt bearbeitet von BB-Freak am Sa, Jan 28, 2012 15:53, insgesamt 2-mal bearbeitet

Xeres

Moderator

BeitragSa, Jan 28, 2012 15:50
Antworten mit Zitat
Benutzer-Profile anzeigen
...du lädst doch hoffentlich nicht jeden Frame in eine einzelne Variable?
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

ozzi789

BeitragSa, Jan 28, 2012 15:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Falls sich bei der Animation bloss die Farbe ändert kannst du das ja automatisieren Wink

Verwendest du LoadAnimImage ?
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5

BB-Freak

BeitragSa, Jan 28, 2012 15:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Eigentlich nicht ich lade alle mit LoadAnimImage . Nur dank kostenloser Demo Version sind alle Bilder bmp Surprised

Xeres

Moderator

BeitragSa, Jan 28, 2012 16:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Ob bmp oder nicht sollte egal sein, aber ozzis Unglaublich_lange_variablen_namen_für_Kleidung Methode, würde ich so nicht unterstützen. Types (oder Arrays) für viele Daten - immer.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

BB-Freak

BeitragSa, Jan 28, 2012 16:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich finde das mit dem Case nicht mal schlecht ich werde ja auch keine ends langen Namen verwenden, sonder die Item ID's die jedes Item hat(Types) Wink

Noch eine Frage : Mein Spiel hat verschiedene Welten, ich möchte das der Spieler am Rand der einen Karte in die andere springt soll ich Goto verwenden oder Case oder gibt es eine andere Möglichkeit ? Und muss ich dann jedesmal den Kompletten Code für die erste Welt in die 2. kopieren ?

@ozzi789
Tja schade das sich nicht nur die Frabe änder Wink

Midimaster

BeitragSa, Jan 28, 2012 16:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Die "Übersicht" verliert man selten durch die Anzahl der Bilder, sonder mehr durch eine ungünstige Wahl der Variablennamen... Beschreibe doch mal selbst, warum Du hier fürchtest, den Überlbick zu verlieren und worin sich dies äußert.

Bei 5 sec würde ich nichts beim Laden ändern wollen. Vielleicht kannst Du mal eine typische Zeile aus der Lade-Routine hier veröffentlichen und dann eine typische Zeile, die zeigt, wie man den Spieler umkleidet.
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe

Xeres

Moderator

BeitragSa, Jan 28, 2012 16:44
Antworten mit Zitat
Benutzer-Profile anzeigen
GoTo ist ein NoGo. Select-Case ist auch keine Lösung in dem Sinne - du brauchst eine Struktur, die du für dich arbeiten lässt (manchmal gerne Engine genannt).
Die aktuelle Karte liegt z.B. als Array vor und die neue Karte wird geladen, wenn man auf ein bestimmtes Tile tritt. Aktuelle Karte abspeichern/nur aus dem Speichern löschen, so dass keine Reste bleiben wie Items o.ä. und dann die neue Karte aus einer Datei Laden.
So, dass es eine Subfunktion vom normalem Spiel ist: Spiel() -> LadeKarte() -> Spiel().

Wenn man anfängt Code zu kopieren, macht man vermutlich etwas falsch.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

BB-Freak

BeitragSa, Jan 28, 2012 17:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe schon einmal mein Code hoch geladen ihr könnt ihn hier sehen https://www.blitzforum.de/upload/file.php?id=10283 Wink

Wems vtl. bekannt ist es heißt the Atventure 2D Wink

ozzi789

BeitragSa, Jan 28, 2012 17:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Jetzt bin ich traumatisiert...

Keine Funktionen?
Kein einziger Kommentar? Sad
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5

Xeres

Moderator

BeitragSa, Jan 28, 2012 17:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich will nicht zu negativ wirken... aber das kannst du nochmal komplett neu machen.
Fast 9000 Zeilen Code und nur zwei Funktionen bedeutet keine Struktur.
Label & GoTo haben bei dir zu einem wunderbarem Beispiel von furchtbarem Spagetticode geführt.
Alles, was nicht Global deklariert wurde, ist gar nicht deklariert - was bedeutet, das ein Vertipper zu nie zu findenden Bugs führen wird. Benutze IDEal im Strict-Modus, um dich dagegen ab zu sichern.
Variablen nach dem Muster "aBx1" sind übel. Erstens ließe sich daraus bequem ein Array machen, zum anderen ist die Bezeichnung so nichtssagend, dass sie zu nicht mehr, als einer temporären Benutzung taugt.
Hardgecodete Teile wir "ChangeDir "C:\Program Files\the Atventur(2D)"" werden dir auch zu schaffen machen, wenn es jemals bei jemand anderem laufen soll.

Benutze Funktionen.
Benutze Arrays.
Benutze Konstanten.
Lass die Finger von GoTo.

Da gibt es nichts mehr zu retten. Mein Beileid & viel Erfolg in Zukunft.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

BB-Freak

BeitragSa, Jan 28, 2012 17:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Habja gesagt ich muss das entweder sotieren oder Neu coden Sad
Die meisten labels waren eigentlich zur Orieentirung gedacht. Damit ich bestimmte Stellen im Code wiederfinde. Ich hab auch ne aktuellere Version in der ich Funktionen reingebracht habe Wink

Midimaster

BeitragSa, Jan 28, 2012 18:51
Antworten mit Zitat
Benutzer-Profile anzeigen
mein Tipp: Du nimmst diese aktuelle Version und trennst alles in logische Abschnitte (Pseudo)-Funktionen auf. Das ist maximal 3h Arbeit. Dann reduzierst Du doppeltes, kopierst "reine" Teile in ein neues Fenster und dort setzt sich allmählich der neue Code zusammen.

Wenn Du möchtest, kann ich Dir helfen, allerdings nicht jetzt am Wochenende sondern z.b. am Montag abend ab 20:00... Drei Montage mit je 1 Stunde.

Dann gehen wir das gemeinsam durch und ändern es nur so, dass Du es auch nachher noch verstehst. Der Code wird sicherlich 6000 Zeilen kürzer werden nach der Änderung! Und wieder beherschbar!
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group