2D Spiel Engine

Anfängerfragen zum Programmieren mit PureBasic.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

> Also wenn ich dein Tool BMP2MAP verwende, dann funktionierts, aber wenn ich dann die Map laden will, mithilfe der Procedure, funktionierts nicht.

ui... kannste das problem dann bitte mal noch genauer beschreiben?

...und vielleicht auch im bmp2map-thread, dann machen wir das mal dort, wenns dir recht ist...

ISO isn thema für sich.
einige lösen es so, dass sie trotzdem eine senkrechte matrix verwenden,
und dafür versetzte darstellung und eine komplexe richtungstabelle.

andere lösen es so, dass sie die karte lediglich um 45° gedreht darstellen.
(einen kurzen code hatte ich die tage hier gepostet: http://www.purebasic.fr/german/viewtopi ... 406#115406 )

und ja, die sprites überdecken sich natürlich,
das macht die berechnung der mausposition etwas komplizierter,
trotzdem würde ich davon abraten, zu SpritePixelCollision zuflucht zu nehmen,
das vergräbt deine performance tiefer als jeder Leichenbestatter.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Vermilion
Beiträge: 1846
Registriert: 08.04.2006 16:00
Computerausstattung: Apple iMac (2010) & HP Notebook
Wohnort: Heidekreis

Beitrag von Vermilion »

Naja, und den letzten Code den du in diesem Thread gepostet hast, ging auch nicht auf anhieb.
In der Zeile

Code: Alles auswählen

DisplaySprite(100+Map(MapX+SX,MapY+SY), 16*SX - FineX , 16*SY - FineY )
also im Teil des Codes

Code: Alles auswählen

;***********************************
;*** Tile Engine
  For SY=0 To 38
    For SX = 0 To 50
      DisplaySprite(100+Map(MapX+SX,MapY+SY), 16*SX - FineX , 16*SY - FineY )
    Next
  Next
;*********************************** 
meinte der Compiler bei mir
#Sprite Object not initialized
Ja, ok, das mit dem SpritePixelCollision() habe ich nur genommen, weil ich keinen anderen Weg wusste...

So, jetzt zu BMP2MAP... Ich poste das lieber noch hier rein, da es sich noch auf diesen Source Code bezieht. Also da der Source erstmal so nicht funktionerte, weil die obrige Fehlermeldung kam, musste ich das leider ummodellieren dass er halt nur ein Sprite anzeigt. Das war Quark, deswegen ist der Fehler glaub ich nich bei der Procedure für das Map laden... ...also anders gesagt der Fehler lag im eigentlichen Programm.

Kannst du das mal bitte einbauen? :D
Also die Map-lade Procedure von deinem BMP2MAP in den letzten von dir in diesem Thread geposteten Code
Bild

Immer die neueste PureBasic Version. Auf allem Betriebssystemen. Ich bin ein OS-Nomad!
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

the Nameless hat geschrieben:Naja, und den letzten Code den du in diesem Thread gepostet hast, ging auch nicht auf anhieb.
In der Zeile ... meinte der Compiler bei mir
#Sprite Object not initialized
hm... nuja.. da musst du selber was verbockt haben.
ich hab soeben nochmal den code aus dem posting in die IDE kopiert,
und siehe da, er funktioniert.
natürlich musst du den code ins selbe verzeichnis speichern wie deine 8 sprites.
(aber da sollte dann ja eigentlich auch eine meldung kommen,
dass ers nich laden konnte, wenn das der fehler wäre....)

...oder meintest du jetzt mit verwendung von bmp2map?

du musst natürlich dabei ein paar dinge beachten:

* wenn du beim zeichnen der Map die Farbe 0 verwendest, musst du
auch ein sprite 0 laden, dann darf dein tileset nicht erst bei 1 anfangen.

* natürlich musst du insgesamt soviel tiles laden, wie deine Map farben enthält.

* die laderoutine packst du ganz einfach vor deine hauptschleife,
bzw. rufst die Procedure von dort auf.

* Arrays sind in 4.0 nicht mehr Global. d.h. wenn du das laden von
einer Proc aus vornehmen willst, musst du das array Global machen.

* die von der Datei zurückgelieferten MapWidth/MapHeight also die
Ausmaße der Map musst du in einem ReDim in deinem Code verwenden
und als Prüfobergrenze bei der Koordinaten-bewegung.
außer du machst deine Map von anfang an und immer gleich groß, also hier 1024x1024.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Vermilion
Beiträge: 1846
Registriert: 08.04.2006 16:00
Computerausstattung: Apple iMac (2010) & HP Notebook
Wohnort: Heidekreis

Beitrag von Vermilion »

Ich weiß woran es lag! Ein simpler Fehler, da stand ja sowas wie "Map(n,t) = Random(7)+1", aber da ich ja nur 8 Sprites habe, konnte er das 9. nicht laden (7+1 = 8 ). Ein wirklich dummer Rechenfehler ><°

Und Ich habs jetzt hingekriegt, alles läuft einwandfrei! GEIL! xD
Naja, ok, nicht ganz, denn wenn ich nach ganz rechts oder unten auf der Map scrolle, sagt der PBE immer "Array index out of bounds" und beendet das Programm. Wenn es dann als Executable ausführe, dann kommt WIndows mit der Sache Der Befehl "Read" verweist auf den Speicher blablabla.... Ich weiß es jetzt zwar nicht mehr, aber vorher war das noch nicht so, oder?

Aber was ich noch fragen wollte, wie kann ich denn mehr als die vorgegebenen 28 Farben verwenden? Also, dass ich am Ende mehr als 28 verschiedene Felder habe? Ich schätze mal, ich ergänze unter anderem die Tabelle am Ende vom BMP2MAP Programm...oder?

Und, jetzt fehlt mir glaub ich auch nur noch das:
Ich will, dass am Ende in der Mitte des Bildschirms eine Figur ist, der Spieler. Der bleibt auch immer da. Die Karte bewegt sich nur, das geht ja jetzt schon. Wie sich der Spieler bewegt ist für mich auch kein Problem zu machen, jedoch wollte ich wissen, da der Spieler ja nicht auf allen Feldern laufen soll, wie ich ermitteln kann, auf welchem Sprite er steht. Finde ich das mit meinem besten Freund SpriteCollission heraus? :)
Naja, ok, um genauer zu sein, er soll gar nich auf diese unzugänglichen Felder drauf, sonder auf dem nächstliegenden zugänglichen (am Rande zum unzugänglichen) stehen bleiben. Und was ist mit Gegnern, die unabhängig vom Spieler laufen?
Bild

Immer die neueste PureBasic Version. Auf allem Betriebssystemen. Ich bin ein OS-Nomad!
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

> "Array index out of bounds"

deine Mapgrenzen-abfrage

Code: Alles auswählen

      If MapX > 1023-50 
        MapX = 1023-50 
muss natürlich zur größe der Map passen.
im beispiel ist 1023 der maximale index und 50 die breite des ausschnitts.
(1023=MaxIndex bei Karte 1024xY)
das sorgt darfür, dass in der darstellung

Code: Alles auswählen

    For SX = 0 To 50 
      DisplaySprite(100+Map(MapX+SX,
MapX + SX nicht > 1023 werden kann.
bei kleineren Maps musst du das natürlich anpassen.
flexibler wirds, wenn du gleich mit ner variablen oder konstanten arbeitest.

> Ich schätze mal, ich ergänze unter anderem die Tabelle am Ende vom BMP2MAP Programm

richtig. beachte, dass nur die farben, die du in der liste hast, durch Tilecodes ersetzt werden.
sollte eine farbe auch nur minimal abweichen, bleibt in der Map eine 0,
so wie sie beim erstellen des nackten Array drin war.


zu den Spielfiguren:
am besten verwaltest du die als extra-objekte, die direkt mit der Map interagieren.
also, du gibst ihnen koordinaten, wo sie sich auf der map befinden,
und schaust direkt ins array, ob sie in einer richtung platz haben oder nicht.
darstellen tust du sie einfach nach der Map (obendrüber)
ggf. noch eine auswahl einbaun, dass nur die gezeichnet werden, die wirklich im bildausschnitt sind.


> Finde ich das mit meinem besten Freund SpriteCollission heraus?
dieses Spielkonzept ist komplett ohne die verwendung irgendwelcher kollisionen umsetzbar.
für Mouse-Over-Unit nimmst du koordinatenvergleiche,
für Schusswechsel rechnest du im voraus treffer aus und stellst einfach dementsprechend dar.

grundsätzlich:
das gesamte geschehen und die ergebnisse werden im voraus berechnet.
die darstellung dient nur der darstellung, nicht irgendeiner ergebnisermittlung.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Vermilion
Beiträge: 1846
Registriert: 08.04.2006 16:00
Computerausstattung: Apple iMac (2010) & HP Notebook
Wohnort: Heidekreis

Beitrag von Vermilion »

Joa, hab ich jetzt mit Variablen gemacht :)

Naja, da die Map ja vielfältig werden soll, werde ich dann mal einiges hinzufügen. Bloß muss man aufpassen, dass man dann noch richtig pixelt, denn so geringe Farbunterschiede wie RGB(255, 255, 255), RGB(254, 254, 254) kann man ja wohl kaum wahrnehmen.

OK, das mit der grafischen Darstelllung... hast irgendwie Recht. :)

Also um die Spielfiguren werd ich mich jetzt erstmal in Ruhe kümmern... wenn die dann auch drin sind, dann müsste eigentlich alles beisammen sein.

bis die Tage...
Benutzeravatar
Creature
Beiträge: 678
Registriert: 29.08.2004 00:55
Wohnort: Frankfurt/Main

Beitrag von Creature »

@the nameless,

schau dir mal playbasic an. ich denke, damit hast du dein ziel in nullkommanix erreicht.
wenn die 3d features ähnlich gut wie die 2d's werden, werde ich mir das auf alle fälle zulegen...

www.playbasic.com
Bildung kommt von Bildschirm und nicht von Buch, sonst hieße es ja Buchung.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

> Farbunterschiede wie RGB(255, 255, 255), RGB(254, 254, 254) kann man ja wohl kaum wahrnehmen.

stimmt, aber du wirst auch kaum 16Mio unterschiedliche tiles brauchen.
256 verschiedene ist schon viel, und 256 klar unterscheidbare farben sollte man grad noch hinbekommen...
wäre dann sowieso die frage, wie man die alle in PAINT im sofortigen zugriff haben kann.
im color-requester hast du 48 grundfarben und 16 benutzerdefinierte.
also, mehr als 64 verschiedene tiles in der Map ergibt mit bmp2map und PAINT keinen Sinn mehr.

außerdem was bmp2map nur als krücke gedacht, dass man mit der engine schneller voran kommt,
und nicht daran hängenbleibt, mit gewalt zuerst nen mapeditor zu proggen.
aber soweit wie du bist, könntest du eigentlich einen schreiben.
es sollte nicht soviel arbeit sein.
du könntest z.b. das demolisting von mir einwenig umstellen,
mouseover war ja schon drin.
mach halt das finescrolling raus, und mach den kartenausschnitt kleiner,
damit du rechts ne liste der möglichen tiles displayn kannst.
so nen ganz einfachen tile-editor hast du schnell geschrieben.
verlangt ja keiner, dass er ne super-windows-application ist.

[edit]
Creature hat geschrieben:... playbasic ...
ahja... jetzt weiß ich, womit viele von den 20$-games, von denen man 1-hour-demos runterladen kann, geschrieben wurden... XD
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Creature
Beiträge: 678
Registriert: 29.08.2004 00:55
Wohnort: Frankfurt/Main

Beitrag von Creature »

Kaeru Gaman hat geschrieben: [edit]
Creature hat geschrieben:... playbasic ...
ahja... jetzt weiß ich, womit viele von den 20$-games, von denen man 1-hour-demos runterladen kann, geschrieben wurden... XD
und wenn es so wäre ;) is doch egal.
ich seh das proggen wie die künstler ihr kunst.
was zählt...ist das ergebnis... :mrgreen:
Bildung kommt von Bildschirm und nicht von Buch, sonst hieße es ja Buchung.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

is klar, ich meins ja auch nich negativ... ;)
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten