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:

hüpfen

 
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
hi
2x verwarnt


Anmeldungsdatum: 12.01.2005
Beiträge: 30

BeitragVerfasst am: 19.01.2005, 14:25    Titel: hüpfen Antworten mit Zitat

ich habe eine frage:

wie kann ich einen gegenstand oder menschen springen lassen?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 19.01.2005, 15:19    Titel: Antworten mit Zitat

Hallo.

Natürlich geht das. Dazu musst du lediglich die Koordinaten (X,Y) des betreffenden "Gegenstands" verändern.

Viele Grüße!
Sebastian
_________________

Die gefährlichsten Familienclans | 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
SpionAtom



Anmeldungsdatum: 10.01.2005
Beiträge: 395

BeitragVerfasst am: 19.01.2005, 15:20    Titel: Antworten mit Zitat

Hallo!
Drück dich mal konkreter aus.
Aber generell simuliert man Sprünge, indem man eine "Schwerkraft einbaut. Ein Wert, der alle Positonen stets um einen gewissen Betrag nach unten setzt. Will man nun springen, so muss man noch eine Sprungkraft einbauen, der alle Positionen um einen gewissen Betrag nach oben verschiebt.
Aber schreib mal, was du genau willst.
Danke
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
hi
2x verwarnt


Anmeldungsdatum: 12.01.2005
Beiträge: 30

BeitragVerfasst am: 19.01.2005, 16:49    Titel: also Antworten mit Zitat

also ich will genau:

ich habe einen schneemann mit ungefär 20 befehlen und der soll einfach ein paar cm auf und ab springen(ich will bitte die syntax wie das springen geht)!

Durch Moderator bearbeitet: Weniger Ausrufezeichen tuen's auch...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Bernd



Anmeldungsdatum: 14.09.2004
Beiträge: 498
Wohnort: Kulmbach

BeitragVerfasst am: 19.01.2005, 17:20    Titel: Antworten mit Zitat

Code:

if inkey$ = "beliebige taste" then
y-koordinate = y koordinate - 10 'nur zum Beispiel 10, kann auch varieren...
end if


so, jetzt müsstes du ihn nur wieder runter fallen lassen, aber dazu bin ich gerade zu faul *g*
_________________
Neue Homepage: http://www.glubb.rockt.de

UND

Der Wahnsinn hat seine eigene Homepage: http://pulmollwand.rulz.de
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 19.01.2005, 17:27    Titel: Antworten mit Zitat

Hallo.

Eine Syntax für das Springen gibt es nicht.

Was stellst du dir denn für einen Befehl vor?
JUMP (Object$, Height%, Speed%) -> JUMP Schneemann, 100, 123
Sowas gibt es nicht. Du musst alles schön manuell programmieren.

durchgeknallt durchgeknallt durchgeknallt

Viele Grüße!
Sebastian
_________________

Die gefährlichsten Familienclans | 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
hi
2x verwarnt


Anmeldungsdatum: 12.01.2005
Beiträge: 30

BeitragVerfasst am: 19.01.2005, 17:49    Titel: Antworten mit Zitat

Irgendwie schaff ichs trotzdem net kann mir bitte wer den ganze code aufschreiben?

Durch Moderator bearbeitet: Komplette Großschreibung und Ausrufezeichen entfernt!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
MisterD



Anmeldungsdatum: 10.09.2004
Beiträge: 3071
Wohnort: bei Darmstadt

BeitragVerfasst am: 19.01.2005, 18:05    Titel: Antworten mit Zitat

erstens hör auf so rumzubrüllen
zweitens hör mit den Ausrufezeichen auf!
dritten
Code:
schwerkraft = 1
y=400
DO
 if v = 0 and inkey$<>"" then v = 300
 v = v-schwerkraft
 y = y+v
 if y > 400 then y = 400 : v=0
 'schneemann wegmachen, neu zeichnen, Koordinaten irgendwas für x und variable y
LOOP

könnte funktionieren..
_________________
"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
Benutzer-Profile anzeigen Private Nachricht senden
Dusky_Joe



Anmeldungsdatum: 07.01.2005
Beiträge: 1007
Wohnort: Regensburg/Oberpfalz

BeitragVerfasst am: 19.01.2005, 18:53    Titel: Antworten mit Zitat

Hi!

So wie ich das sehe, liegt das Problem daran, dass deine Grafik-Figur aus so vielen Befehlen besteht.
Nun gibt es zwei möglichkeiten, so eine Animation darzustellen:

Methode 1: Zeichnen und löschen.
Eine Ani ist nichts anderes als eine folge von Einzelbildern kurz hintereinander.
Du musst also nichts weiter tun, als eine ganze Menge einzelbilder zu zeichnen, und sie dann wieder zu löschen.
Das könnte so aussehen, um einen Punkt zu bewegen:

Code:

 PSET (100, 100)
 CLS
 PSET (100, 101)
 CLS
 PSET (100, 102)
 CLS
 PSET (100, 103)
 ...

Aber frag irgend einen Programmierer, was er von dieser Methode hält - er wird dir sagen, dass das unglaublich aufwändig ist, und nix bringt, außer einem riesen quelltext.
Aber: Wer sagt denn, dass man jede Koordinate einzeln angeben muss?
Man könnte doch ganz einfach die sich bewegenden Punkte durch eine Variable austauschen....

Code:

FOR y = 100 TO 150
 PSET (100, y)
 CLS
NEXT

So sieht das schon mal ganz gut aus.
Was uns aber noch stört: CLS löscht den ganzen Bildschirm!
Wenn du aber noch ein wenig Grafik nebenher laufen lässt, dann müsstest du die auch jedes mal in der FOR-NEXT-Schleife neu Zeichnen. Das ist noch immer etwas umständlich.
Also, löschen wir doch einfach nur den einzelnen Punkt!

Code:

FOR Y = 100 TO 150
 PSET (100, y), 15
 PSET (100, y), 0
NEXT

Jetzt wird einfach über den schon gezeichneten Punkt ein schwarzer "drübergelegt". Wenn du jetzt einen... sagen wir mal roten Hintergrund hast, müsste die zweite Zeile natürlich
PSET (100, y), 4
heißen. Aber das ist ja eh logisch, oder Zunge rausstrecken
Also kurz:
Du machst eine Zeichnung, und wenn die fertig ist, Legst du wieder die selbe Zeichnung in Hintergrundfarbe drüber.
Das könnte für deinen Schneemann so aussehen:

Code:

SCREEN 12

FOR y = 100 TO 150
 'Zuerst zeichnen wir den Schneemann...
 CIRCLE (320, y), 50, 15
 CIRCLE (320, y + 50), 30, 15
 CIRLCE (320, y + 80), 10, 15

 '... und dann löschen wir ihn wieder!
 CIRCLE (320, y), 50, 0
 CIRCLE (320, y + 50), 30, 0
 CIRLCE (320, y + 80), 10, 0
NEXT


Dabei kann es dir aber passieren, dass alles so schnell abläuft, dass du nichts mehr von der Animation siehst!
Was nun?
Ein Anfänger, der sich nur so zum Spaß einen "Film" für den eigenen PC basteln möchte, kann ruhig so eine Zeile zum verlangsamen benutzen:

FOR warten = 1 TO 5000: NEXT

Das hat verschiedene Nachteile, z.B., dass das Prog nicht auf jedem PC gleich schnell abläuft, aber ich denke, dass du als anfänger erst mal lernen willst, wie man überhaupt animierte grafik proggt.
Wenn du mehr über fortschrittlichere Methoden wissen willst, können wir dir sicher auch helfen *g*


Diese Methode funktioniert relativ gut. Aber der Code wird schnell unübersichtlich.
Deswegen wird für Animationen oft anderer Code verwendet:

Methode 2: GET und PUT
GET und PUT sind zwei QB-Befehle, die am ehesten zu vergleichen sind mit kopieren und einfügen aus MSPaint. Oder jedem anderen Grafik-bearbeitungsprog *g*
Sehen wir uns einmal die Syntax an:

GET (x1, y1)-(x2, y2), Array
PUT (x, y), Array, AKTIONSTYP

(Damit du die Zeilen ab hier verstehst, solltest du dich mit dem DIM-Befehl auskennen, bzw wissen, was ein Array ist. Ansonsten mach dich erst mal in den QB-Monster-FAQ schlau! happy )

Bei GET gibst du also zwei Koordinaten an. Alles innerhalb dieser Koordianten wird in das Array kopiert.
Und PUT gibt den Inhalt des Arrays an (X|Y) wieder auf dem Bildschirm aus.
Naja, nicht ganz so einfach: Da ist ja noch der AKTIONSTYP:
Davon gibt es ein paar:
PSET - Gibt die Grafik wirklich so aus, wie sie eingelesen wurde
=> Da dieser Aktionstyp am einfachsten zu verstehen ist, werden wir zuerst einmal nur diesen verwenden.

PRESET - Gibt die Grafik inventiert wieder aus. Ansonsten bleibt alles gleich.
XOR - für Animationen benutzt, "vermischt" den bisherigen Hintergrund mit dem von GET
AND und OR - Vermischt ebenfalls Hintergrund mit neuem Bild, aber anders. Um genau zu verstehen, wie das geht, müsstest du dich ein wenig mit Bitweisem komplementieren auskennen. Klingt wahnsinnig schwierig, ist aber ziemlich einfach.... gehört aber nicht hier hin.
Nun, du wirst dich sicher schon die ganze Zeit fragen, wie groß denn nun dieses Array sein muss!
Die große ist von verschiedenen Dingen abhängig:
-Natürlich der Größe des eingelesenen Bildes,
-Verwendetem Bildschirmmodus
-Dem Datentyp des Arrays.
Die QB-Hilfe gibt eine ziemlich lange Formel an, mit der sich die Anzahl der benötigten Bytes errechnen lässt. Sicher wirst du die irgenwann einmal benutzen, für den Anfang reicht aber die Faustregel:

Groesse = (x2 - x1) * (y2 - y1) / 2

Meistens wird der Wert viel zu groß sein, aber noch ist uns das nicht wichtig. Professionelle Grafik kommt erst später Zunge rausstrecken

Nun wollen wir das mal anwenden:

Code:

SCREEN 12

'Schneemann zeichnen
CIRCLE (320, 100), 50, 15
CIRCLE (320, 150), 30, 15
CIRLCE (320,  180), 10, 15

Groesse = (370 - 270) * (190 - 50) / 2 'ist gleich 7000
Dim Schneeman (Groesse)

GET (370, 190)-(270, 50), Schneeman

PUT (10, 400), Schneeman, PSET



Was machen wir also?
- Wir zeichnen den Schneemann
- Wir dimensionieren ein Array, in dem er gespeichert werden soll
- Wir lesen die Grafik ein
- Und geben Sie schließlich wieder aus.

Dieses beispiel kopert den Schneemann nur an einen anderen Ort, also müssen wir noch etwas ändern:

Code:

SCREEN 12

Groesse = (370 - 270) * (190 - 50) / 2
DIM nichts (Groesse)
DIM Schnee (Groesse)

GET (370, 190)-(270, 50), nichts

CIRCLE (320, 100), 50, 15
CIRCLE (320, 150), 30, 15
CIRLCE (320,  180), 10, 15
GET (370, 190)-(270, 50), Schnee

CLS

FOR y = 200 TO 400
 PUT (270, y - 1), nichts, PSET
 PUT (270, y), Schnee, PSET
NEXT



Du siehst, wir arbeiten mit zwei Arrays. Im ersten ist nur der Hintergrund gespeichert - in dem Fall ein schwarzes Viereck *g*
Im zweiten befindet sich unser Schneemann.
Jetzt wird immer zuerst der Hintergrund gezeichnet, um eines niedriger als der alte Schneemann.
Der nämlich wird dann gelöscht. Und so wird Platz gemacht für den neuen!


Ich hoffe, ich konnte dir helfen!
Das Thema GET/PUT ist ziemlich groß, und nicht unbedingt leicht zu packen für jemanden, der erst vor so kurzer Zeit die Drawing Primitives kennen gelernt hat....

Deswegen versuchs erst mal mit Methode 1, probiere rum, und hab aber zwischendurch trotzdem den mut, auch mal was neues auszuprobieren![/b]
_________________
fully biological degradable

Once, the big wave arrives, you've got two ways, you can go:
Either, you ride it, or you don't do.
But, if you don't ride, you'll never know wether you'd have gone wet.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
dreael
Administrator


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

BeitragVerfasst am: 19.01.2005, 22:30    Titel: Beispiel von früher Antworten mit Zitat

Hatte einmal früher eine kleine Sprite-Demo geschrieben:

http://www.dreael.ch/QB/JUMPGAME.ZIP

Am besten Dir diese einmal näher anschauen.
_________________
Teste die PC-Sicherheit mit www.sec-check.net
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 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