Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Tileset in Array einlesen...

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
mkfezzo



Anmeldungsdatum: 16.08.2007
Beiträge: 25

BeitragVerfasst am: 15.01.2013, 14:40    Titel: Tileset in Array einlesen... Antworten mit Zitat

Hallo zusammen,

mich quält grad ein kleines Problem:
Ich möchte Grafiktiles aus Datazeilen in meinem Programm einfügen, auslesen und in einem Feld speichern. Ich möchte diese dann mit get für das einzelne tile speichern - aber als Feld:

z.B.
Dim shared tileset(4+(16*16*4),100) as integer (Tile 16*16, 32 bit, 100 Tiles)

einlesen (nachdem Datazeilen als Grafik auf den Bild ge-psettet wurden):
get(0,0)-(15,15),tileset(1,1) für tile 1
(nächstes Tile anzeigen)
get(0,0)-(15,15),tileset(1,2) für tile 2
(und nächstes Tile anzeigen...and so on...)
...get(0,0)-(15,15),tileset(1,100) für tile 100

das ganze funktioniert natürlich (leider) nicht... was wäre ein anderer/funktionierender weg? Also ich möchte (erstmal) trotz aller anderslautenden Ratschläge mit dim shared deklarieren und unbedingt get/put (das verstehe ich wenigstens etwas!) nutzen?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2507
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 15.01.2013, 20:05    Titel: Antworten mit Zitat

Am besten einen Blick in

http://www.dreael.ch/Deutsch/Download/WindowsBitmapBibliothek.html

werfen, speziell Thematik "Für Trickfilm-Sprites: Der Startindex".

Ansonsten ist es problemlos möglich, ein zweidimensionales Array zu verwenden, man muss jedoch wissen, welcher der beiden Indexe als Bildindex verwendet werden kann, so dass der andere für die Bilddaten dient.

Ich müsste es sonst auch wieder kurz testen (aktuell gerade kein QB zur Hand).
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
mkfezzo



Anmeldungsdatum: 16.08.2007
Beiträge: 25

BeitragVerfasst am: 16.01.2013, 09:58    Titel: Antworten mit Zitat

Ich werde mir den Link mal zuhause ansehen zwinkern
Was mir grade aufgefallen ist, ich programiere das in FB und habe versehentlich im QB-Forum gepostet.
Mir ist bis jetzt aufgefallen, dass z.B. bei o.a. Dimensionierung der Index nicht mit (0,...) anfangen darf - es wird nichts ausgegeben. Wenn ich die Grafik manuell, also einfach als Tile1, Tile2... dimensioniere funktioniert alles - aber wer will das schon?
Auch wird bei z.B. tile(1,1) die erste Grafik angezeigt, bei tile(1,2) hingegen ist schon schluss... die Grafik wird nicht angezeigt. hmmm.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 16.01.2013, 14:39    Titel: Antworten mit Zitat

Hallo!

mkfezzo hat Folgendes geschrieben:
Was mir grade aufgefallen ist, ich programiere das in FB und habe versehentlich im QB-Forum gepostet.

=> Thread ins FreeBASIC-Forum verschoben.

mkfezzo hat Folgendes geschrieben:
Ich werde mir den Link mal zuhause ansehen zwinkern

Die Artikel aus dreaels Sammlung sind alle auf QBasic oder gar GWBASIC bezogen. Von daher sind sie für Programmiervorhaben in FreeBASIC i.d.R. nicht eins zu eins übertragbar. Davon kann man meistens zwar trotzdem viel lernen, weil sie echt gut geschrieben sind und auch sprachunabhängiges Grundlagen-/Hintergrundwissen liefern, aber die Code-Beispiele sind eben meistens doch anders.
Beispielsweise lädt man Bitmaps in FreeBASIC ganz anders (viel einfacher) als damals in QBasic.

mkfezzo hat Folgendes geschrieben:
Dimensionierung der Index nicht mit (0,...) anfangen darf

nemored hat dir vor einiger Zeit doch mal einige Tipps gegeben, wie man Grafiken aus BMP-Dateien laden kann:
http://forum.qbasic.at/viewtopic.php?p=92228#92228
Ganz wichtig dabei: Der Speicher, wo die Grafik "reinkommt", wird heute nicht mehr als manuell dimensioniertes Array vorbereitet. Das war in den allerersten Versionen von FreeBASIC das Vorgehen (-> Ähnlichkeit zu Grafikpuffern in QB), aber schon seit vielen Versionen (seit FB 0.14) benutzt man dafür Pointer und IMAGECREATE:
Code:
'Aus der FreeBASIC-Befehlsreferenz zu BLOAD:
SCREENRES 640, 480, 32
Dim As Any Ptr bild
bild = ImageCreate(48, 48)  'Bildpuffer der Groesse 48x48 anlegen
BLoad "picture.bmp", bild   'Bilddatei in den Puffer laden
PUT (10, 10), bild          'Bildpuffer auf den Bildschirm zeichnen
ImageDestroy (bild)         'Bildpuffer wieder loeschen
Sleep                       'Auf Tastendruck warten
End

Siehe dazu: http://www.freebasic-portal.de/befehlsreferenz/bload-59.html

(Noch einfacher geht es mit einer vorbereiteten Routine:
Code-Beispiel: BMP-Bilder komfortabel in FreeBASIC laden und anzeigen)

Wenn du mehrere Grafiken hast, erzeugst du einfach ein Array mit Bild-Pointern.
Code:
DIM Tileset(1 To 10) As ANY PTR


Damit sowas hier klappt,
Code:
Dim shared tileset(4+(16*16*4),100) as integer (Tile 16*16, 32 bit, 100 Tiles)

müsste FB zuerst die 2. Dimension des Arrays auswerten. Also zuerst alle N von 1 bis 100 verarbeiten und in dabei wiederum die 4+(16*16*4) Integer linear am Stück hintereinanderschreiben. Also 100 Blöcke zu je 4+(16*16*4) Elementen.
Es könnte aber auch sein, dass FreeBASIC zu jedem der 4+(16*16*4) Elemente der 1. Dimension nacheinander 100 Integer schreibt, d.h. 1.028 Blöcke zu je 100 Integern. Das wäre dann ja nicht deine Bildpuffer-Wunschgröße. (Hab ich jetzt aber nicht ausprobiert.)

Wenn du solche Array-Speicher-Tricks machst, musst du dich genau damit auseinandersetzen, wie sowas im Speicher abgelegt wird und musst außerdem darauf hoffen, dass es sich nicht in späteren Versionen mal ändert.

Von daher würde ich schon empfehlen, die sinnvollen Abstraktionen zu benutzen, die dir die Sprache für den Zweck anbietet. Das heißt: Nicht den Bildpuffer selber zusammenbauen, sondern die vorgefertigte Funktion (ImageCreate) benutzen, die es dir genau richtig automatisch erledigt. zwinkern

Viele Grüße!
Sebastian
_________________

Der Markt regelt das! | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz