 |
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 |
Keks
Anmeldungsdatum: 03.11.2007 Beiträge: 156 Wohnort: Dose
|
Verfasst am: 10.12.2007, 17:41 Titel: Sprite über den Bildschirm wandern lassen |
|
|
Leider sind mir die Programme auf qbasic.de zu komplex.
Wie kann ich denn eine Zeichnung über einen Hintergrund mit bestimmten Tasten laufen lassen?
Bzw. dass es Befehle gibt, mit denen man das Teil steuern kann.
Bitte nicht hauen^^
Danke. |
|
Nach oben |
|
 |
Flo aka kleiner_hacker
Anmeldungsdatum: 23.06.2006 Beiträge: 1210
|
Verfasst am: 10.12.2007, 17:52 Titel: |
|
|
Keks hat Folgendes geschrieben: | Bitte nicht hauen |
DOCH! *schlag*
nuja, ist nicht grade schwer wenn mans mal kann
du brauchst dein bild mit schwarzem und mit weißem hintergrund
in einem array...
entweder GETen oder aus ner datei einlesen
nuja, das mit schwarzem hg mit put (x,y),array,OR PUTen, dann das mit dem weißen an die gleiche stelle mit put (x,y),anderesarray,AND, und fertig
vor der schleife noch in ein genauso großes array den hintergrund, der gleich verdeckt sein wird, GETen..
dann, vor jedem put, den alten HG wiederherstellen (xalt,yalt), den neuen (x,y) GETen, und dann die beiden PUTs...
fertig
öhm, vlt wär pageflipping bei mehreren sprites nicht ganz blöd, aber sonst... _________________ MFG
Flo
Satoru Iwata: Wer Spaß am Spielen hat, fragt nicht nach Grafik.
zum korrekten Verstaendnis meiner Beitraege ist die regelmaessige Wartung des Ironiedetektors unerlaesslich. |
|
Nach oben |
|
 |
Keks
Anmeldungsdatum: 03.11.2007 Beiträge: 156 Wohnort: Dose
|
Verfasst am: 10.12.2007, 18:00 Titel: |
|
|
Also es gibt nur ein Teil.
Leider verstehe ich nicht ganz, was du meinst. Ich kenn mich mit get und Put wirklich nicht aus.
Kannst du das vllt als Quelltext schreiben? Wär ganz nett?  |
|
Nach oben |
|
 |
Flo aka kleiner_hacker
Anmeldungsdatum: 23.06.2006 Beiträge: 1210
|
Verfasst am: 10.12.2007, 18:06 Titel: |
|
|
Code: |
du lädst dein sprite ganz egal wie entweder indems in einer datei war oder indem du es auf den screen zeichnest und dann GETest mittels GET(x1,y1)-(x2,y2),bild1
mit bild2 genauso, nur mitm hintergrund halt anders
davor bild1,bild2,hintergrund so DIMen wies in der hilfe steht (4+xlen*ylen*farbtiefe in bits/16) as integer oder so... (ausprobieren geht auch)
dim x as integer,y as integer,xalt as integer,yalt as integer
xalt=x:yalt=y
get (x,y)-step (10,10),hintergrund
do
<neue koordinaten berechnen>
put (xalt,yalt),hintergrund
get (x,y)-step(10,10),hintergrund
put (x,y),bild1,or
put (x,y),bild2,and
loop until Keks_hat_das_kapiert
?"juhuu"
end
|
_________________ MFG
Flo
Satoru Iwata: Wer Spaß am Spielen hat, fragt nicht nach Grafik.
zum korrekten Verstaendnis meiner Beitraege ist die regelmaessige Wartung des Ironiedetektors unerlaesslich. |
|
Nach oben |
|
 |
Mao
Anmeldungsdatum: 25.09.2005 Beiträge: 4409 Wohnort: /dev/hda1
|
Verfasst am: 10.12.2007, 20:32 Titel: |
|
|
@Keks:
Dann wär jetzt der richtige Moment, dich damit auseinanderzusetzen.
Ich mein, du möchtest etwas programmieren - aber lernen willst du dabei nix? oO _________________ Eine handvoll Glück reicht nie für zwei.
--
 |
|
Nach oben |
|
 |
E-P-S

Anmeldungsdatum: 16.09.2004 Beiträge: 500 Wohnort: Neuruppin
|
Verfasst am: 10.12.2007, 21:56 Titel: |
|
|
Bevor du noch völlig verzweifelst (oder uns zum Verzweifeln bringst) ein kleiner Tipp:
1. Tutorials durchackern (z.B: diese hier)
2. auf www.qbasic.de die MonsterFAQ studieren
3. probieren
4. wenn's jetzt noch nicht geht ordentlich formulierte, aussagekräftige und präzise Fragen hier im Forum posten.
Have Fun _________________ Man kann sich öfter als zweimal im Leben halb tot lachen. |
|
Nach oben |
|
 |
Keks
Anmeldungsdatum: 03.11.2007 Beiträge: 156 Wohnort: Dose
|
Verfasst am: 11.12.2007, 21:11 Titel: |
|
|
Geht soweit, nur gibts ein kleines Problem.
Code: | DIM bildschirm(0 TO 1000)
DIM sprite(0 TO 100)
x1 = 50
y1 = 50
x2 = 60
y2 = 60
LINE (34, 21)-(23, 41)
GET (0, 0)-(80, 80), bildschirm
LINE (x1, y1)-(x2, y2), , B
GET (x1, y1)-(x2, y2), sprite
10 SLEEP
FOR i = x1 TO x2
FOR k = y1 TO y2
PSET (i, k), 0
NEXT k
NEXT i
PUT (0, 0), bildschirm
x1 = x1 + 1
y1 = y1 + 1
x2 = x2 + 1
y2 = y2 + 1
PUT (x1, y1), sprite
GOTO 10
|
Warum wird die erste LINE nicht gezeichnet?
Und wie kann ich es so machen, dass ich nicht mit PSET löschen muss, damit es nicht flimmert? Und warum kann bildschirm nicht 0,0 bis 100,100 gehen? |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4702 Wohnort: ~/
|
Verfasst am: 11.12.2007, 23:20 Titel: |
|
|
Keks hat Folgendes geschrieben: | Und warum kann bildschirm nicht 0,0 bis 100,100 gehen? |
Kann er doch. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
dreael Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 2529 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 12.12.2007, 00:07 Titel: |
|
|
Keks hat Folgendes geschrieben: | Und wie kann ich es so machen, dass ich nicht mit PSET löschen muss, damit es nicht flimmert? Und warum kann bildschirm nicht 0,0 bis 100,100 gehen? |
Das sind alles Dinge, die ein Stück weit ins Kapitel Animationen gehen...
Zu Sprites: Das Zauberwort heisst hier AND-Maske. Hierbei sicherst Du zuerst den Hintergrund mit GET, dann "stanzst" Du mit der AND-Maske die Sihouette aus und fügst anschliessend mit XOR Dein Sprite ein. Das Sprite selber darf alle 16 Farben verwenden, transparente Partien müssen aber Pixelwert 0 besitzen.
Habe unter
http://beilagen.dreael.ch/QB/SPR_DEMO.BAS
ein einfaches Beispiel zusammengestellt. Besonderheit dort: Statischer Hintergrund wird jedes Mal mit PCOPY geholt und dann das Sprite hineingezeichnet, womit das GET()-Sichern entfällt. _________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
Nach oben |
|
 |
Skilltronic

Anmeldungsdatum: 10.09.2004 Beiträge: 1148 Wohnort: Köln
|
Verfasst am: 12.12.2007, 00:11 Titel: |
|
|
Hallo
Keks hat Folgendes geschrieben: | Warum wird die erste LINE nicht gezeichnet? |
Weil Du nur
Code: | PUT (x1, y1), sprite |
schreibst. da fehlt das "Aktionswort", das sagt, wie geputtet werden soll, da gibt es verschiedene Methoden. Am besten siehst Du Dir dazu die Erklärung zur PUT-Anweisung (Graphik) in der Hilfe des QB-Editors an. Unter Details ist alles genau erklärt. Das Aktionswort PSET sorgt dafür, dass das Bild so angezeigt wird, wie es mit GET gespeichert wurde. Mit
Code: | PUT (x1, y1), sprite, PSET |
wird die Linie also immer angezeigt.
Keks hat Folgendes geschrieben: | Und wie kann ich es so machen, dass ich nicht mit PSET löschen muss, damit es nicht flimmert? |
Da gibt es verschieden Möglichkeiten.
1. Du übermalst den alten Sprite mit einem schwarzen, ausgefüllten Rechteck. Du kannst also diesen ganzen Teil
Code: | FOR i = x1 TO x2
FOR k = y1 TO y2
PSET (i, k), 0
NEXT k
NEXT i |
ersetzen durch
Code: | LINE (x1, y1) - (x2, y2), 0, BF |
2. Du speicherst mit einem zweiten Sprite, das die selbe Grösse hat wie das erste den Hintergrund bevor du den eigentlichen Sprite setzt. Beim nächsten Schritt setzt du den Hintergrund mit PUT wieder an die alte Stelle, speicherst den Hintergund im neuen Bereich usw. So kannst Du ein Bild auch vor einem farbigen Hintergrund bewegen.
3. Du benutzt mehrere Bildschirmseiten. Du kannst dazu mal die Hilfe zu PCOPY und SCREEN ansehen. So bekommst Du das Flimmern weg. Du kannst dan einfach jedes Mal mit CLS den ganzen Bildschirm löschen und dann neu zeichnen, oder auch Methode 3 mit der 1. oder 2. kombinieren. Es gab dazu auch schon massenhaft Fragen hier im Forum dazu und noch mehr Antworten. Da und bei den vielen Tutorials z.B. auf www.qbasic.de ist sicher etwas für Dich dabei.
Keks hat Folgendes geschrieben: | Und warum kann bildschirm nicht 0,0 bis 100,100 gehen? |
nemoreds Link führt zwar zum FB-Portal, die WINDOW-Anweisung gibt es aber auch in QB. Damit kannst Du einstellen, von welchen Koordinaten zu welchen der Bildschirm gehen soll.
Gruß
Skilltronic _________________ Elektronik und QB? www.skilltronics.de ! |
|
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.
|
|