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

Anmeldungsdatum: 25.08.2008 Beiträge: 86 Wohnort: auf einer sonnigen Insel :)
|
Verfasst am: 20.09.2009, 10:11 Titel: Hilfe bei sprites und spiel |
|
|
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.
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 |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4704 Wohnort: ~/
|
Verfasst am: 20.09.2009, 11:28 Titel: |
|
|
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 |
|
 |
Löwenherz

Anmeldungsdatum: 25.08.2008 Beiträge: 86 Wohnort: auf einer sonnigen Insel :)
|
Verfasst am: 20.09.2009, 14:03 Titel: |
|
|
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).
mehr zu frage b) kommt später
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 |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4704 Wohnort: ~/
|
Verfasst am: 20.09.2009, 14:56 Titel: |
|
|
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 |
|
 |
Löwenherz

Anmeldungsdatum: 25.08.2008 Beiträge: 86 Wohnort: auf einer sonnigen Insel :)
|
Verfasst am: 21.09.2009, 14:04 Titel: frage wg. "bewegen" |
|
|
hi nemored !
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
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 |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4704 Wohnort: ~/
|
Verfasst am: 21.09.2009, 15:03 Titel: |
|
|
Und wenn ich das hier früher gelesen hätte, dann hätte ich nicht zweimal antworten müssen.
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 |
|
 |
Löwenherz

Anmeldungsdatum: 25.08.2008 Beiträge: 86 Wohnort: auf einer sonnigen Insel :)
|
Verfasst am: 22.09.2009, 09:47 Titel: bleibt schwierig ;) |
|
|
danke und klappt jetzt mit dem sich bewegenden Sprite
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 ?
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 |
|
 |
|
|
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.
|
|