Landschaft erstellen , mit Scrollen

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
lassma-asma
Beiträge: 107
Registriert: 10.07.2007 09:14
Wohnort: Saarland

Landschaft erstellen , mit Scrollen

Beitrag von lassma-asma »

Hi LEute ,

Ich ab ma wieder ein Problem ...


eill so ne Art kleines Strategiespiel erstellen ... frage mich jetzt aber wie man eine "LAndschaft "´erstellt... also aus der vogelperspektive ... eine wiese , sand ...

ich will also ne Map erstellen auf der man auch scrollen kann ... (bsp Wie in Real FArm)

Hab ma gehört man muss irgendwas mit nem Array machen und dann was mit Data ...Habs aber nich gerafft ... Könnte mir vielleicht einer helfen ...
Gruß lassma-asma

MultiPONG
HANGMAN


PB 3.94 und PureBasic 4.51 !!!
Benutzeravatar
#NULL
Beiträge: 2238
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

such' ma nach 'map' oder 'tilemap'
wurde schon oft erklärt.
z.b. hier http://www.purebasic.fr/german/viewtopi ... ht=#116634

<edit>
oder hier
http://www.purebasic.fr/german/viewtopi ... ht=#106177
Zuletzt geändert von #NULL am 30.09.2007 09:51, insgesamt 1-mal geändert.
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
Bisonte
Beiträge: 2468
Registriert: 01.04.2007 20:18

Beitrag von Bisonte »

ähm was du wohl meinst wäre eine "Tile-Engine" und da würde ich dich gerne auf die Suchfunktion des Forums verweisen (jetzt du den Begriff kennst ;) ) oder http://www.purebasic.fr/german/viewtopi ... c&start=10

Dort ist es wirklich witzig (aber sehr Lehrreich auch für oder sogar besonders für "Anfänger") von Zaphod beschrieben worden (die Funktionsweise)

Der komplette Thread umfasst im Moment 7 Seiten, aber komplett gelesen hab ich z.B. ne Menge über Tile Engine's gelernt .... echt hier nochmal dank an all dieda gepostet haben :D

Edit: boah zu langsam ich sein ;)
Benutzeravatar
lassma-asma
Beiträge: 107
Registriert: 10.07.2007 09:14
Wohnort: Saarland

Beitrag von lassma-asma »

So .. wollte mir jetzt ma das beispiel da angucken ...

Code: Alles auswählen

InitSprite() 
InitKeyboard() 
OpenScreen(800,600,32,"Tiledemo") 

For n=1 To 8 
  LoadSprite( 100+n, Right("00"+Str(n),3)+".jpg") 
Next 

Dim Map(1023,1023) 

For n=0 To 1023 
  For t=0 To 1023 
    Map(n,t) = Random(7)+1 
  Next 
Next 

Repeat 
  ExamineKeyboard() 
  ClearScreen(0,0,0) 

  If KeyboardPushed(#PB_Key_Left) 
    FineX-2 
    If FineX < 0 
      FineX = 14 
      MapX-1 
      If MapX < 0 
        MapX = 0 
        FineX = 0 
      EndIf 
    EndIf 
  EndIf 
  If KeyboardPushed(#PB_Key_Right) 
    FineX+2 
    If FineX > 14 
      FineX = 0 
      MapX+1 
      If MapX > 1023-50 
        MapX = 1023-50 
        FineX = 14 
      EndIf 
    EndIf 
  EndIf 
  If KeyboardPushed(#PB_Key_Up) 
    FineY-2 
    If FineY < 0 
      FineY = 14 
      MapY-1 
      If MapY < 0 
        MapY = 0 
        FineY = 0 
      EndIf 
    EndIf 
  EndIf 
  If KeyboardPushed(#PB_Key_Down) 
    FineY+2 
    If FineY > 14 
      FineY = 0 
      MapY+1 
      If MapY > 1023-38 
        MapY = 1023-38 
        FineY = 14 
      EndIf 
    EndIf 
  EndIf 

;*********************************** 
;*** 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 
;*********************************** 

  FlipBuffers() 
Until KeyboardPushed(#PB_Key_Escape)
aber beim displaysprite sagt er das spriteobject wär nich initialisiert ...

was tuen ?
Gruß lassma-asma

MultiPONG
HANGMAN


PB 3.94 und PureBasic 4.51 !!!
Benutzeravatar
#NULL
Beiträge: 2238
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

da ist ein bild im post, das brauchst du natürlich (im selben ordner wie der code).
entweder zu zerplückst es dann in einzelbilder, die du so nennst, wie sie geladen werden (dazu schaust du dir mal bitte die lade-routine im code an).
..oder du ersetzt die lade-routine

Code: Alles auswählen

For n=1 To 8
  LoadSprite( 100+n, Right("00"+Str(n),3)+".jpg")
Next 
durch:

Code: Alles auswählen

UsePNGImageDecoder()
LoadImage(0,"tileset01yi0.png")
For n=1 To 8
  CreateSprite(100+n, 16,16)
  StartDrawing(SpriteOutput(100+n))
    DrawImage(ImageID(0), -(n-1)*18-2, -2)
    ;Circle(7,7,5,$00ff00)
  StopDrawing()
Next
dann kannst du das bild als ganzes lassen, aber mußt es trotzdem runterladen und im ordner speichern, in dem der code ist.

..bei dem anderen link/code brauchst du übrigens keine extra bilder.

<edit>
steht aber auch mit dabei, dass man die bildchen braucht.
lesen mußt du schon!
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
lassma-asma
Beiträge: 107
Registriert: 10.07.2007 09:14
Wohnort: Saarland

Beitrag von lassma-asma »

ja schon klar ... habs auch gelesen ... habs auch alles so gemacht ... ausgeschnitten , benannt ... schon klar ... aber es geht trotzdem nittt...

was soll das mit dem 100 + überhaupt ...???
Gruß lassma-asma

MultiPONG
HANGMAN


PB 3.94 und PureBasic 4.51 !!!
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

kann ja nich sein.

wenn du das so ausgeschnibbelt und abgespeichert hast, wie es da steht, dann funzt es auch.

denk dran, dass du auch den code abspeichern musst, damit es eine aktuelle direktory gibt.
Bisonte hat geschrieben:Der komplette Thread umfasst im Moment 7 Seiten, aber komplett gelesen hab ich z.B. ne Menge über Tile Engine's gelernt .... echt hier nochmal dank an all dieda gepostet haben :D
hört man gern. danke fürs feedback. :D
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
lassma-asma
Beiträge: 107
Registriert: 10.07.2007 09:14
Wohnort: Saarland

Beitrag von lassma-asma »

ahhh ... sry war mein fehler ... sry echt ... falsch ausgeschnitten ...
so jetzt hab ichs schon fast ganz verstanden ...

frag mich jetzt noch was dieses 100+Map(***) soll und was das

Code: Alles auswählen

16*SX - FineX
soll..
achso und oben das

Code: Alles auswählen

Right("00"+Str(n),3)
da weiss ich nich was das sein soll...

wenn mir das nochma einer näherbringen könnte wäre ich echt froh ...
sry für die umstände nochmal !
Gruß lassma-asma

MultiPONG
HANGMAN


PB 3.94 und PureBasic 4.51 !!!
Benutzeravatar
#NULL
Beiträge: 2238
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

Code: Alles auswählen

For n=1 To 8
  LoadSprite( 100+n [....]
die sprites werden unter den nummern 101 bis 108 geladen, und unter den
nummern müssen sie auch angezeigt werden. beim laden ist die 1 bis 8
in der variable n und beim anzeigen in dem jeweiligen array-element.
das mit der 100+ hat KG nur gemacht, damit der code flexlibler wird, wenn
du mal noch andere sprites laden willst und sich die konstanten ändern/verschieben.

das Right(..) erzeugt einfach die dateinnamen, deren dateien geladen werden sollen. guckt die einfach an was es macht:

Code: Alles auswählen

For n=1 To 8
  Debug Right("00"+Str(n),3)+".jpg"
Next 
das "16*SX - FineX"..
SX zählt in der schleife hoch, so dass ein tile des arrays bei
x-index = 0, bei x-pixel 0 dargestellt wird.
x-index = 1, bei x-pixel 16 dargestellt wird.
x-index = 2, bei x-pixel 32 dargestellt wird.
x-index = 3, bei x-pixel 48 dargestellt wird.
..immer plus 16 (wenn deine tiles 16 pixel breit sind)
und das - FineX verschiebt die map dann um einzelne pixel (scrolling)
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
lassma-asma
Beiträge: 107
Registriert: 10.07.2007 09:14
Wohnort: Saarland

Beitrag von lassma-asma »

ok sowit schin ma danke ...

aber bei mir wird immer ne fehlermeldung angezeit , dass das sprite "100+Map(rechnung" nich initialisiert wär ... was soll das Map (MapX+SX und so eigentlich ?
Gruß lassma-asma

MultiPONG
HANGMAN


PB 3.94 und PureBasic 4.51 !!!
Antworten