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:

BLoad und Get... Spritetiles speichern für Verarbeitung

 
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
Heiko



Anmeldungsdatum: 28.07.2008
Beiträge: 101

BeitragVerfasst am: 18.09.2013, 15:47    Titel: BLoad und Get... Spritetiles speichern für Verarbeitung Antworten mit Zitat

Ich kann mit BLoad ein Image laden und mit Get nunmehr einen bestimmten Bildbereich seperat sozusagen abspeichern.
Ich hätte gern dafür eine Routine welche selbstständig ein Image unter angaben der jeweiligen Größe eines Tiles aufsplittet.

Rauskommen sollten zwei Funktionen ala CreateAnimImage, wo das Bild gesplittet und die Frames gespeichert werden.
Und ein DrawAnimImage wo an Position x,y ein bestimmtes Frame, welches man der Funktion mitteilt, gezeichnet werden soll.

Wie müsste ich das mit dem Handling lösen?
Sicherlich in einem Type, aber ich würde dafür Hilfe brauchen, bzw. wenigstens ein paar Denkanstösse.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Eternal_pain



Anmeldungsdatum: 08.08.2006
Beiträge: 1783
Wohnort: BW/KA

BeitragVerfasst am: 18.09.2013, 16:01    Titel: Antworten mit Zitat

Das ginge wesentlich unkomplizierter.. es würde reichen wenn du mit BLoad ein Image lädst und mit put nur einen bestimmten teil des Bildes ausgibst.
Dürfte einiges an Zeit, Arbeit und Speicher sparen
_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
Heiko



Anmeldungsdatum: 28.07.2008
Beiträge: 101

BeitragVerfasst am: 18.09.2013, 16:35    Titel: Antworten mit Zitat

schon, aber wenn ich ein tileset mit sagen wir mal 50 tiles habe, da wäre es doch einfacher wenn man das so steuern könnte.
oder auch für animationenen.

und der code wäre wiederverwendbar...

oder meintest du das anders?

also dass bei jedem zeichnen anhand des frames und der breite+höhe jedesmal onthefly ausgerechnet wird welcher teil gezeichnet wird?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4700
Wohnort: ~/

BeitragVerfasst am: 18.09.2013, 16:45    Titel: Antworten mit Zitat

Wenn du 50 Tiles in seperate Bildpuffer speicherst, brauchst du auf jeden Fall wesentlich mehr Speicherplatz.Ob das Zeichnen eines Bild-Teilbereichs wesentlich mehr Zeit kostet als das Zeichnen eines kompletten kleineren Bildpuffers, weiß ich nicht; das müsste man mal testen. Aber programmiertechnisch ist es prinzipiell egal, ob du den richtigen kleinen Bildpuffer raussuchst und ausgibst oder ob du die richtige Stelle im Gesamtbildpuffer suchst und ausgibst.
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Heiko



Anmeldungsdatum: 28.07.2008
Beiträge: 101

BeitragVerfasst am: 18.09.2013, 16:55    Titel: Antworten mit Zitat

kann man den teilbereich denn nicht einfach seperat im speicher ablegen?
es geht ja auch nicht nur ums anzeigen, wenn da noch kollisionen etc. dazukommen würden, geht das über simples anzeigen eines bereichs eines images hinaus.

ich würde tatsächlisch jedes tile einzeln ansprechbar haben wollen und suche nun immer noch nach einer lösung für das handling
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Eternal_pain



Anmeldungsdatum: 08.08.2006
Beiträge: 1783
Wohnort: BW/KA

BeitragVerfasst am: 18.09.2013, 17:15    Titel: Antworten mit Zitat

Hier ein Beispiel wie ich es zB mit einer font.bmp gelöst habe... dabei hat jeder font die gleiche größe (in meinem Beispiel 16x16) etwas verwirrend vielleicht sind es gleichzeitig 16x16 Zeichen, also insgesammt dann 256... ob das nun Fonts oder Tiles sind spielt dabei kaum eine Rolle, das Prinzip sollte gleich sein....

Auch wenn du es nun zerlegen willst, kann das Beispiel dabei helfen... statt des put, kannst du eben mit get genau diese Bereiche durchlaufen und in seperate speicherbereiche kopieren...

Code:

'Globals
Namespace Globals
    Dim FontGRX    as any ptr
    Dim FontWidth  as Integer
    Dim FontHeight as Integer
End Namespace
   

Sub LoadFont(byval filename as String)
    Dim as Integer FF, W, H
    FF = Freefile
   
    Open filename for binary as #FF
        get #FF, 19, W
        get #FF,   , H
    Close #FF
   
    Globals.FontWidth = W\16
    Globals.FontHeight = H\16
   
    Globals.FontGRX = Imagecreate(W,H)
   
    Bload filename, Globals.FontGRX
End Sub


Sub DrawFont(byval fromX as Integer, byval fromY as Integer, byval drawString as String)
    If (Globals.FontGRX = 0) Then Exit Sub
       
    Dim cChar as UByte   
    Dim xChar as Integer
    Dim yChar as Integer
   
       
    For C as Integer = 0 to Len(drawString)-1
        cChar = drawString[C]
        xChar = cChar mod 16
        yChar = cChar \ 16
   
        Put (fromX+(C*Globals.FontWidth),fromY),Globals.FontGRX,(xChar*Globals.FontWidth,yChar*Globals.FontHeight)-((xChar*Globals.FontWidth)+(Globals.FontWidth-1),(yChar*Globals.FontHeight)+(Globals.FontHeight-1)),trans
    Next C
End Sub
   
Sub FreeFont()
    If (Globals.FontGRX) Then Imagedestroy(Globals.FontGRX)
    Globals.FontWidth  = 0
    Globals.FontHeight = 0
End Sub

Screenres 640,480,32

LoadFont("beispiel.bmp")

DrawFont 100,100,"Test123 54"



sleep
FreeFont()

_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
Heiko



Anmeldungsdatum: 28.07.2008
Beiträge: 101

BeitragVerfasst am: 18.09.2013, 17:24    Titel: Antworten mit Zitat

Danke dir das ist schonmal ein guter ansatz...
Bin in FB nicht wirklich gut, hoffe ich bekomme das gescheit hin.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 18.09.2013, 19:58    Titel: Antworten mit Zitat

Heiko hat Folgendes geschrieben:
es geht ja auch nicht nur ums anzeigen, wenn da noch kollisionen etc. dazukommen würden, geht das über simples anzeigen eines bereichs eines images hinaus.

Wenn du einigermaßen sinnvoll programmierst, sollte Kollisionsdetektion absolut gar nichts damit zu tun haben, wie du deine Grafiken im Speicher verwaltest, sonst hast du was falsch gemacht.
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Heiko



Anmeldungsdatum: 28.07.2008
Beiträge: 101

BeitragVerfasst am: 18.09.2013, 20:01    Titel: Antworten mit Zitat

grins ja ich weiß...man sollte gfx und berechnungen anderer art voneinander trennen....
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
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