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:

Hilfe bei sprites und spiel

 
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
Löwenherz



Anmeldungsdatum: 25.08.2008
Beiträge: 86
Wohnort: auf einer sonnigen Insel :)

BeitragVerfasst am: 20.09.2009, 10:11    Titel: Hilfe bei sprites und spiel Antworten mit Zitat

guten morgen,

habe mich gestern Morgen drangesetzt und eine Spielszene mit FB gebaut, die so aussieht wie das unten aufgeführte Beispiel. Ich fange erst mit dem Spiel an (soll mal "Wasserspiel" heißen) und betrete Neuland. Da tauchen allerhand Fragen auf, die bestimmt schon mal hier besprochen worden sind, sorry falls das der Fall sein sollte. Wenn nicht, umso besser!

Also generelle Frage wie diese hier:

a) wie kann ich einen Sprite (x,y Richtung) bewegen ? Habe fünf davon.

b) wie kann ich einen Player als Hauptakteur des Spiels bewegen, der
in Aktion treten soll (bestimmte Sprites löschen, treffen oder mit
ihnen Punkte sammeln oder verlieren ?)

http://h.imagehost.org/0208/gameZero-intro1.png

was ich schon geschafft habe: Kann die Szene in xy Richtung bewegen bzw. scrollen. lächeln

mir würden schon ein paar Beispielzeilen genügen bzw. ein paar Links. Beiße mich dann durch. Beste Grüße, Löwenherz und schönen Sonntag noch (soll ja nochmal richtig warm werden in der Mitte Deutschlands)

ps: vielleicht sollte diese Post in den Bereich Projekt vorstellen hinein ?
_________________
Das Leben ist wie eine Pralinenschachtel, man weiß nie, was dort drinnen für tolle wie böse Überraschungen stecken
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
nemored



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

BeitragVerfasst am: 20.09.2009, 11:28    Titel: Antworten mit Zitat

Ich mache das für gewöhnlich so, dass ich für jedes bewegliche Grafikobjekt die x- und y-Koordinate sowie den Hintergrund speichere (GET). Wenn ich das Objekt bewegen will, setze ich erst wieder den Hintergrund (PUT) und zeichne dann das Objekt an die neue Stelle.

Ich hoffe, meine Antwort passt zur Frage ...
Frage b) ist mir noch zu vage - was meinst du genau? Ich würde erst mal auch für den Spieler die Position speichern. Wenn die Spielerfigur an einer bestimmten Stelle ist (z. B. in der Nähe oder über einem anderen Objekt), dann passiert was spezielles oder kann eine Aktion ausgeführt werden usw.
_________________
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
Löwenherz



Anmeldungsdatum: 25.08.2008
Beiträge: 86
Wohnort: auf einer sonnigen Insel :)

BeitragVerfasst am: 20.09.2009, 14:03    Titel: Antworten mit Zitat

hi nemored.

Zitat:
Ich mache das für gewöhnlich so, dass ich für jedes bewegliche Grafikobjekt die x- und y-Koordinate sowie den Hintergrund speichere (GET). Wenn ich das Objekt bewegen will, setze ich erst wieder den Hintergrund (PUT) und zeichne dann das Objekt an die neue Stelle.


zu meiner Frage a) Das heißt ich muss erst alle XY Koordinaten der Tiles bestimmen ? Um die Objekte dann bewegen zu können ?
meinst du so etwas in der Art:

Code:
Bload "wasserA.bmp", Wasser
    Get(0,0)-(mapx,mapy), Wasser


in diesem Bereich lade ich bei mir die Sprites. Ich muss also noch eine SUB bauen, wo ich z.B. in Sub TilesMove() die Sprites mit Multikey bewegen kann ? Verstehe ich noch nicht ganz, sorry.

Hast du eine Beispiel Codezeile da? Komme nicht weiter, wenn ich meine Tiles lade und mit Get bestimme gibt es lauter Schlieren, wenn ich z.B. das Wasser mit Get ermittele (siehe oben). verwundert

mehr zu frage b) kommt später zwinkern

danke.

löwenherz
_________________
Das Leben ist wie eine Pralinenschachtel, man weiß nie, was dort drinnen für tolle wie böse Überraschungen stecken
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
nemored



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

BeitragVerfasst am: 20.09.2009, 14:56    Titel: Antworten mit Zitat

Ich speichere das Sprite-Bild lieber nochmal in einer extra .bmp und habe in der Leveldatei nur die Daten, wo welche Objektnummer auftaucht.

Hier mal ein recht einfaches selbst bewegendes Sprite:
Code:
type TypSprite
  as integer x, y, b, h
  as any ptr bild, hg
end type
screenres 200, 200, 32
dim as TypSprite sprite
sprite.x = 0
sprite.y = 90

' Sprite laden (steht am besten auch in einer SUB)
dim as integer breit, hoch, ff
ff = freefile
open "sprite.bmp" for input as #ff
get #ff, 19, sprite.b
get #ff, 23, sprite.h
close #ff
sprite.bild = imagecreate(sprite.b, sprite.h)
sprite.hg   = imagecreate(sprite.b, sprite.h)
bload "sprite.bmp", sprite.bild

' beliebiger Hintergrund; Sprite darstellen
bload "hintergrund.bmp"   ' obwohl ich hier lieber ein kleines Tile nehme und kachle
get (sprite.x, sprite.y)-step(sprite.b-1, sprite.h-1), sprite.hg
put (sprite.x, sprite.y), sprite.bild, pset

' Sprite bewegen
do
  sleep 20, 1
  put (sprite.x, sprite.y), sprite.hg, pset
  sprite.x += 1
  get (sprite.x, sprite.y)-step(sprite.b-1, sprite.h-1), sprite.hg
  put (sprite.x, sprite.y), sprite.bild, pset
loop until sprite.x > 180

' aufräumen
imagedestroy sprite.bild
imagedestroy sprite.hg
getkey

_________________
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
Löwenherz



Anmeldungsdatum: 25.08.2008
Beiträge: 86
Wohnort: auf einer sonnigen Insel :)

BeitragVerfasst am: 21.09.2009, 14:04    Titel: frage wg. "bewegen" Antworten mit Zitat

hi nemored ! lächeln

danke für den Code,der klappt prima mit meinen Bildern. Hab was dazugelernt !

Mein Spiel ist in SUBs aufgeteilt.

das mit dem Bewegen des Sprites klappts jedoch in meinem Code nicht traurig

Code:
Sub bewege()
Dim ff As integer
ff = FreeFile
   
OPEN "angel.bmp" FOR INPUT AS #ff
GET #ff, 19, spiel.TileLaenge
Get #ff, 23, spiel.TileHoehe
Close #ff
BLOAD "angel.bmp", spiel.neuesbildA

DO
  SLEEP 20, 1
  PUT (spiel.BildX, spiel.BildY), spiel.neuesbild, PSET
  spiel.BildX += 1
  GET (spiel.BildX, spiel.BildY)-STEP(spiel.MapX-1, spiel.MapX-1), spiel.neuesbild
  PUT (spiel.BildX, spiel.BildY), spiel.neuesbildA, PSET
LOOP Until spiel.BildX > 180

End Sub


weil ich das noch nie gemacht habe, frage ich mich, ob ich etwas vergessen habe. Mein sprite mit der Blume wird geladen, erscheint kurz oben links im Bild. Wenn ich mein Bild scrolle, bewege, geht das Bild sofort wieder weg. Von Bewegung null Spur (*lache*). Na ja, ich probier's halt weiter, macht nämlich Spass herumzutüfteln.

mein spritetype sieht so aus:

Code:
Type SpielType
    CameraX     As Integer
    CameraY     As Integer
    MaxCameraX  As Integer
    MaxCameraY  As Integer
    BildX       As Integer
    BildY       As Integer
    TileLaenge  As Integer
    TileHoehe   As Integer
    MapX        As Integer
    MapY        As Integer
    neuesbild   As Any Ptr
    neuesbildA  As Any Ptr
End Type


Hab dir ne "pn" zum Problem geschickt!

liebe Grüße, löwenherz
_________________
Das Leben ist wie eine Pralinenschachtel, man weiß nie, was dort drinnen für tolle wie böse Überraschungen stecken
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
nemored



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

BeitragVerfasst am: 21.09.2009, 15:03    Titel: Antworten mit Zitat

Und wenn ich das hier früher gelesen hätte, dann hätte ich nicht zweimal antworten müssen. grinsen

Das Problem liegt vor allem an der fehlenden Speicherreservierung für spiel.neuesbild und spiel.neuesbildA. Außerdem muss es heißen
Code:
GET (spiel.BildX, spiel.BildY)-STEP(TileLaenge-1, TileHoehe-1), spiel.neuesbild

_________________
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
Löwenherz



Anmeldungsdatum: 25.08.2008
Beiträge: 86
Wohnort: auf einer sonnigen Insel :)

BeitragVerfasst am: 22.09.2009, 09:47    Titel: bleibt schwierig ;) Antworten mit Zitat

danke und klappt jetzt mit dem sich bewegenden Sprite grinsen

aber, ich glaube ich lass das erst Mal weg mit dem Scroll Window, das verursacht nur Ärger (muss grinsen), warum sich es einfach machen, wenn es auch schwierig geht ? Obwohl ich gerne wissen will, wie das genau geht, wenn ich das Pferd so aufgezäumt habe ? zwinkern

Zitat:
Das Problem liegt vor allem an der fehlenden Speicherreservierung für spiel.neuesbild und spiel.neuesbildA. Außerdem muss es heißen
Code:
GET (spiel.BildX, spiel.BildY)-STEP(TileLaenge-1, TileHoehe-1), spiel.neuesbild


Wenn das Sprite sich dann bewegt (worüber ich mich schon freue), ich die Keytasten runter, links, rechts bewege kommt es weiterhin zu Schlierenbildung in einem kleineren Bereich, was mit der TilesLaenge und Breit zu tun haben könnte. Dachte ich kann das weglassen, weil ich die TilesLaenge bereits in meinem Spiel fest definiert habe, seufz, na ja...

Code:
Sub Aufbau()
    screeninfo Spiel.BildX, Spiel.BildY
    Spiel.TileLaenge = 32
    Spiel.TileHoehe = 32
    ...
End Sub

'-----------------------------
Sub bewege()
...
Open "angel.bmp" FOR INPUT AS #ff
Get #ff, 19, spiel.TileLaenge 
Get #ff, 23, spiel.TileHoehe
...
spiel.neuesbildA = imagecreate(spiel.TileLaenge, spiel.TileHoehe)
spiel.neuesbild = imagecreate(spiel.TileLaenge, spiel.TileHoehe)



versuche, wenn ich noch Zeit habe, das zu klären. Mit Fehlern lernt man/frau ja am besten. Danke dir. Mehr kommt bestimmt noch. Ich will das Konzept ja verstehen und halte nichts von Kopieren oder in anderen FB Beispielen von Spielen herumwühlen, da lerne ich nicht viel draus.

Gruß Löwenherz
_________________
Das Leben ist wie eine Pralinenschachtel, man weiß nie, was dort drinnen für tolle wie böse Überraschungen stecken
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail 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