 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Tomtitom

Anmeldungsdatum: 20.09.2004 Beiträge: 308
|
Verfasst am: 04.02.2006, 19:57 Titel: Sprites drehen |
|
|
Huhu, kennt ihr mich noch
ich habe da mal ne Frage, also ich habe ein bmp-Bild eingeladen (das übliche mit imagecreate; get ...). Ist es jetzt irgendwie möglich das Bild in 90°-Schritten zu drehen? Meine bisherigen Recherchen haben dazu nix ergeben, ich vermute mal es geht nicht so einfach.
Wie kann ich denn wenigstens auf das geGETtete Array zugreifen, so einfach wie in QB geht das ja nicht mehr. So könnte ich mir notfalls ne eigene Routine schreiben.
MfG, Tomtitom
P.S. ich werde in baldiger Bälde im Projekt-Forum sagen, an was ich gerade so rumbastle  |
|
Nach oben |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 04.02.2006, 21:10 Titel: |
|
|
muddu von hand drehen. bloadhandle[4] ist der erste pixel, bload[4+sizex*sizey] der letzte.. nimm n kleines bild und schau dir die anordnung an und dann probiers halt ma zu drehen.. _________________ "It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra |
|
Nach oben |
|
 |
Tomtitom

Anmeldungsdatum: 20.09.2004 Beiträge: 308
|
Verfasst am: 04.02.2006, 21:49 Titel: |
|
|
das mit dem Bload ist noch nicht ganz das was ich wollte, aber du hast mich auf eine Idee gebracht - dies hier klappt auf jeden Fall schon mal:
Code: | DIM SHARED Sprites AS ANY PTR, Teilsprite AS ANY PTR, gedreht AS ANY PTR, dummy AS ANY PTR
SCREEN 18,32
dummy = IMAGECREATE(1,1)
Teilsprite = IMAGECREATE(32,32)
gedreht = IMAGECREATE(32,32)
Sprites = IMAGECREATE(1024, 640)
BLOAD "Sprites.bmp", Sprites
x1 = 64 'Koords eines Teilsprites
x2 = 95
y1 = 0
y2 = 31
GET Sprites, (x1, y1)-(x2, y2), Teilsprite 'Sprite einlesen
PUT (1,1), Teilsprite, PSET 'auf Bildschirm malen
FOR x = 0 TO 31 'jeden einzelnen Pixel einlesen
FOR y = 0 TO 31
GET Teilsprite, (x,y)-(x,y), dummy
PUT gedreht, (y,31-x), dummy, PSET '90° nach links gedreht
NEXT
NEXT
PUT (100,100), gedreht, PSET 'auf Bildschirm malen
GETKEY |
Aber ich häts halt schön gefunden, wenn man halt irgendwie das Teilsprite direkt gedreht ausgeben kann, ohne das man was temporäres braucht oder das original überschrieben werden muss.
Falls trotzdem noch irgendeine Verbesserung hat, ruhig raus damit, vor allem was die Geschwindigkeit angeht, würde ich mich über effizienters freuen. |
|
Nach oben |
|
 |
ytwinky

Anmeldungsdatum: 28.05.2005 Beiträge: 2624 Wohnort: Machteburch
|
Verfasst am: 04.02.2006, 22:02 Titel: |
|
|
Hüte dich beim Rotieren vor unnötigen Double-Berechnungen, die verlangsamen das Ganze erheblich..
..ansonsten sollteste dir mal den Code aus dem amerikanischen Forum ziehen:
http://www.freebasic.net/forum/viewtopic.php?t=2441&highlight=rotate
Viel Spaß beim Drehen und dreh nicht ab
Gruß
ytwinky _________________
v1ctor hat Folgendes geschrieben: | Yeah, i like INPUT$(n) as much as PRINT USING.. | ..also ungefähr so, wie ich GOTO.. |
|
Nach oben |
|
 |
Tomtitom

Anmeldungsdatum: 20.09.2004 Beiträge: 308
|
Verfasst am: 04.02.2006, 23:35 Titel: |
|
|
also das Programm vom Joshy scheint ja recht gut zu sein, aber:
- für meine Ansprüche ist es schon beinahe überladen, ich brauche ja nur 90° Rotation
- dann funktioniert es nicht fehlerfrei, irgendwie wird bei meinen Sprites der Rand falsch gesetzt
- dann läuft es nur auf nicht auf meinem FBC, da ich noch einen älteren habe (hatte irgendwie noch keinen Grund zu wechseln und bei den neuen klappt chr$(255) + "X" nicht mehr ???)
Für Joshy, falls du hier mal vorbeischaust:
Zum einen das Bild, wie falsch gezeichnet wird (vergrößert). Und und wenn du den fehler erkennst und zu viel langeweile hast, würde ich mich freuen, wenn du eine schlanke Version für meine Ansprüche machst
 |
|
Nach oben |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 05.02.2006, 01:58 Titel: |
|
|
chr(255)+"k" für alt+f4 ist die neue version von chr(255)+"X".. _________________ "It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra |
|
Nach oben |
|
 |
Tomtitom

Anmeldungsdatum: 20.09.2004 Beiträge: 308
|
Verfasst am: 05.02.2006, 12:04 Titel: |
|
|
MisterD hat Folgendes geschrieben: | chr(255)+"k" für alt+f4 ist die neue version von chr(255)+"X".. |
ah danke, aber wieso wurde das überhaupt geändert, so kann man das jetzt sehr leicht mit chr$(255) + "K" verwechseln, was ja die lonks-Pfeiltaste ist. |
|
Nach oben |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 05.02.2006, 12:09 Titel: |
|
|
schreib einfach chr(255,107) für schließen, chr(255,[72=hoch|75=links|77=rechts|80=runter]) für die Pfeiltasten und schon is das problem erledigt
geändert wurde das nach einer abstimmung im englischen forum, dass man alt+f4 statt strg+c sendet wenn man auf den schließen-knopf drückt.. is halt nich mehr dos sondern jetzt eben windows. _________________ "It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra |
|
Nach oben |
|
 |
|
|
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.
|
|