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:

Sprite über den Bildschirm wandern lassen

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



Anmeldungsdatum: 03.11.2007
Beiträge: 156
Wohnort: Dose

BeitragVerfasst am: 10.12.2007, 17:41    Titel: Sprite über den Bildschirm wandern lassen Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Flo
aka kleiner_hacker


Anmeldungsdatum: 23.06.2006
Beiträge: 1210

BeitragVerfasst am: 10.12.2007, 17:52    Titel: Antworten mit Zitat

Keks hat Folgendes geschrieben:
Bitte nicht hauen

DOCH! *schlag* lachen
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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Keks



Anmeldungsdatum: 03.11.2007
Beiträge: 156
Wohnort: Dose

BeitragVerfasst am: 10.12.2007, 18:00    Titel: Antworten mit Zitat

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? zwinkern
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Flo
aka kleiner_hacker


Anmeldungsdatum: 23.06.2006
Beiträge: 1210

BeitragVerfasst am: 10.12.2007, 18:06    Titel: Antworten mit Zitat

Kopf schütteln
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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Mao



Anmeldungsdatum: 25.09.2005
Beiträge: 4409
Wohnort: /dev/hda1

BeitragVerfasst am: 10.12.2007, 20:32    Titel: Antworten mit Zitat

@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
Benutzer-Profile anzeigen Private Nachricht senden
E-P-S



Anmeldungsdatum: 16.09.2004
Beiträge: 500
Wohnort: Neuruppin

BeitragVerfasst am: 10.12.2007, 21:56    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Keks



Anmeldungsdatum: 03.11.2007
Beiträge: 156
Wohnort: Dose

BeitragVerfasst am: 11.12.2007, 21:11    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
nemored



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

BeitragVerfasst am: 11.12.2007, 23:20    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
dreael
Administrator


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

BeitragVerfasst am: 12.12.2007, 00:07    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Skilltronic



Anmeldungsdatum: 10.09.2004
Beiträge: 1148
Wohnort: Köln

BeitragVerfasst am: 12.12.2007, 00:11    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht 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 QBasic. 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