dim problem mit tiles

Übersicht BlitzBasic Beginners-Corner

Gehe zu Seite 1, 2  Weiter

Dieses Thema ist gesperrt, du kannst keine Beiträge editieren oder beantworten.

Blitzprogger

Betreff: dim problem mit tiles

BeitragFr, März 28, 2008 18:26
Antworten mit Zitat
Benutzer-Profile anzeigen
wie kann man denn abfragen ob ein tile = 1 oder 0 ist? ich habe es so versucht:

Code: [AUSKLAPPEN]
Graphics 800,600,16,1
SetBuffer BackBuffer()

ClsColor 200,200,255
Color 0,0,0

baum = LoadImage("baum.bmp")
wiese = LoadImage("wiese.bmp")
x=0
y=0

Dim tile(299)

tile(35) = 1
tile(150) = 1
tile(200) = 1

While Not KeyDown(1)

 For i=1 To 300
  If tile() = 1 Then DrawBlock baum,x,y
  If tile() = 0 Then DrawBlock wiese,x,y
  x = x + 40
  If x > 799 Then
   x = 0
   y = y + 40
  EndIf
 Next

 Flip
 Cls

Wend

End

das geht aber eleider nicht Crying or Very sad könnt ihr mir sagen wie ich das lösen muss?

mfg
Mein aktuelles Projekt, Irnithal: http://www.blitzforum.de/worklogs/415/

Unfreiwilliger Gewinner des BAC# 115. Wink
 

Tritium

BeitragFr, März 28, 2008 18:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
If tile() = 1 Then DrawBlock baum,x,y


Setz in tile() die Schleifenvariable ein, dann gehts.

edit
Und außerdem musst Du die Schleife dann von 0 bis 299 laufen lassen.

Blitzprogger

BeitragFr, März 28, 2008 20:21
Antworten mit Zitat
Benutzer-Profile anzeigen
ich habs mit einer variable versucht (v), das sah dann etwa so aus:
Code: [AUSKLAPPEN]
for i=1 to 300
 if tile(v) = 1 then .....
 if tile(v) = 0 then .....
 v = v + 1
next

das hat aber nicht funktioniert Crying or Very sad . bitte um hilfe.

mfg
Mein aktuelles Projekt, Irnithal: http://www.blitzforum.de/worklogs/415/

Unfreiwilliger Gewinner des BAC# 115. Wink

hectic

Sieger des IS Talentwettbewerb 2006

BeitragFr, März 28, 2008 20:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Deine Schleifenvariable ist ''i'' und nicht ''v''.

edit1: mom... Also dein ganzer Ansatz ist etwas Merkwürdig.

Probier mal folgenden (on the fly) Code: [AUSKLAPPEN]
Graphics 800,600,16,1
SetBuffer BackBuffer()

ClsColor 200,200,255
Color 0,0,0

Dim bilder(1)
bilder(0) = LoadImage("baum.bmp")
bilder(1) = LoadImage("wiese.bmp")

Dim tile(19,14)

tile(14,1) = 1
tile(10,7) = 1
tile(10,9) = 1

While Not KeyDown(1)
   
   For y=0 To 14
      For x=0 To 19
         DrawBlock bilder(tile(x,y)),x*40,y*40
      Next
   Next
   
   Flip
   Cls
   
Wend

End

Blitzprogger

BeitragSa, März 29, 2008 8:54
Antworten mit Zitat
Benutzer-Profile anzeigen
danke hectic, es functioniert jetzt Very Happy . hätt ich auch daufkommen sollen Embarassed

mfg
Mein aktuelles Projekt, Irnithal: http://www.blitzforum.de/worklogs/415/

Unfreiwilliger Gewinner des BAC# 115. Wink

Blitzprogger

BeitragSa, März 29, 2008 20:01
Antworten mit Zitat
Benutzer-Profile anzeigen
ich hab zwar nun schon eine kleine landschaft gemalt (mit den tiles) aber nun kommt das problem mit der kollision. ich will ja nicht dass die spielfigur durch bäume und mauern geht und jede position mit "if x > 100 and x < 120 then ....." abfragen ist auch zimlich umständlich. deshalb frage ich euch wie ich das denn anstellen soll. bitte um schnelle hilfe.

mfg
Mein aktuelles Projekt, Irnithal: http://www.blitzforum.de/worklogs/415/

Unfreiwilliger Gewinner des BAC# 115. Wink

Caesium

BeitragSa, März 29, 2008 20:24
Antworten mit Zitat
Benutzer-Profile anzeigen
bei der bewegungsroutine musst du jeweils eine abfrage einbauen.

wenn du beispielsweise den spieler auf der x-achse um ein feld nach rechts bewegen möchtest, fragst du vorher ab, ob an der map position, zu der der spieler gelangen will, eine wand ist, oder nicht. ist dort eine, wird die bewegungsroutine nicht ausgeführt:

Code: [AUSKLAPPEN]
;beispiel für bewegen nach rechts
If map(px + 1, py) <> "0" ;0 = wand, wenn da keine wand ist, wird der spieler bewegt
    px = px + 1
EndIf

;... usw.


gruß,
caesium
Der Vorteil der Klugheit liegt darin, dass man sich dumm stellen kann. Das Gegenteil ist da schon schwieriger. Smile

Blitzprogger

BeitragSo, März 30, 2008 12:36
Antworten mit Zitat
Benutzer-Profile anzeigen
irgendwie verstehe ich dein beispiel net ganz. soweit ich das verstanden habe testet es ob der pixel = 0 ist, oder ? fallls nicht entschuldige meine aussage. ich bitte hier nochmals um hilfe. kann mir einer sagen wie man das tile nebenan "abfragt" ob es in einem bestimmten bereich liegt? hoffe auf hilfe trotz meinen nervenden fragen Smile

mfg
Mein aktuelles Projekt, Irnithal: http://www.blitzforum.de/worklogs/415/

Unfreiwilliger Gewinner des BAC# 115. Wink

TimBo

BeitragSo, März 30, 2008 12:49
Antworten mit Zitat
Benutzer-Profile anzeigen
If map(px + 1, py) <> "0"
warum hast du die 0 in "" gemacht?

aber den Rest könnte ich mal versuchen zu erläutern Very Happy

also:
deine Koordinate musst du wie auf einem Schachbrett vorstellen.
Arrow px ist die x Koordinate bei den Tiles (nicht in Pixeln)
Arrow py demnach die y Koordinate

wenn du dich auf der Koordinate (8|4) aufhälst und nach rechts gehen willst, dann muss du die Koordinate (9|4) Prüfen. Da (9|4) logischerweise rechts von (8|4) ist.

sooo

Zitat:
Code: [AUSKLAPPEN]
If map(px + 1, py) <> 0 ;0 = wand, wenn da keine wand ist, wird der spieler bewegt
    px = px + 1
EndIf

If map(px + 1, py) ;prüft das Tile rechts neben dir
px+1 bedeutet das tile eins rechts von dir

If map(px+1,py) <> 0 ;es wird eine Aktion durchgeführt wenn das Tile neben dir nicht 0 ist <> = nicht

px = px + 1
deine Koordinate wird versetzt, du bewegst dich also

endif;müsste klar sein ^^

mfg
Intel Quad-Core ViiV unmatched
  • Zuletzt bearbeitet von TimBo am So, März 30, 2008 15:16, insgesamt einmal bearbeitet

Caesium

BeitragSo, März 30, 2008 13:00
Antworten mit Zitat
Benutzer-Profile anzeigen
*hust*... mein fehler. lese die maps als aus dateien per ReadLine und speichere sie dann in einem string-array.. war wohl iwie automatisch, dass ich die anführungszeichen da hin gemacht habe. danke fürs verbessern. ^^

gruß,
caesium
Der Vorteil der Klugheit liegt darin, dass man sich dumm stellen kann. Das Gegenteil ist da schon schwieriger. Smile

Blitzprogger

BeitragSo, März 30, 2008 13:31
Antworten mit Zitat
Benutzer-Profile anzeigen
entschuldigt meine dummheit Embarassed , aber das hab ich net ganz begfiffen. soll ich die levels (damit meine ich die werte der tiles (tile(9,5) = 2)) in dateien speichern? soll ich meine spielfigur denn auch tilebasiert gehen lassen (ist im moment noch mit pixels)? wie kann ich den wert eines tiles herausfinden (wenn meine spielfigur z.b. danebensteht)? zugegeben, das sind jetzt ganz schön viele fragen Rolling Eyes hoffe denoch auf antwort und leser mit stählernen nerven Very Happy

mfg
Mein aktuelles Projekt, Irnithal: http://www.blitzforum.de/worklogs/415/

Unfreiwilliger Gewinner des BAC# 115. Wink

The_Nici

BeitragSo, März 30, 2008 13:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Nehmen wir an du hast 32x32 Tiles.
Dann kannst du Int(Spielerposition durch 32) machen, und hast die Position auf dem Tile.

MfG

Und um Maps zu speichern: Bau dir einen Editor.

Blitzprogger

BeitragSo, März 30, 2008 14:42
Antworten mit Zitat
Benutzer-Profile anzeigen
danke für deine antwort the nici Very Happy hab auch gleich angefangen nen editor zu proggen, allerdings eröffnet sich nun ein neues problem. wenn ich mit der maus so über die landschaft fahre und mir überlege wo ich denn einen baum hinsetzen soll will ich ja net dass der baum irgendwo gesetzt wird sondern in diesem tile in dem sich meine maus befindet. nur hab ich keine ahnung wie das mit dem runden etc. anfangen Sad

hier mein Code: [AUSKLAPPEN]
Graphics 800,600,16,1
SetBuffer BackBuffer()

; das mit dem bilderladen ruhig überspringen :-)
Dim bilder(18)
bilder(0) = LoadImage("wiese.bmp")
bilder(1) = LoadImage("weg1.bmp")
bilder(2) = LoadImage("weg2.bmp")
bilder(3) = LoadImage("weg3.bmp")
bilder(4) = LoadImage("weg4.bmp")
bilder(5) = LoadImage("weg5.bmp")
bilder(6) = LoadImage("weg6.bmp")
bilder(7) = LoadImage("mauerweg.bmp")
bilder(8) = LoadImage("baum.bmp")
bilder(9) = LoadImage("felsen.bmp")
bilder(10) = LoadImage("mauer.bmp")
bilder(11) = LoadImage("turm.bmp")
bilder(12) = LoadImage("mauer2.bmp")
bilder(13) = LoadImage("haus1.bmp")
bilder(14) = LoadImage("haus2.bmp")
bilder(15) = LoadImage("haus3.bmp")
bilder(16) = LoadImage("haus4.bmp")
bilder(17) = LoadImage("platz.bmp")
bilder(18) = LoadImage("mausli.bmp")

xxx = Input("geben sie bitte die menge x-tiles (max.20) ein: ")
yyy = Input("geben sie bitte die menge y-tiles (max 15) ein: ")
xxx = xxx - 1
yyy = yyy - 1
px = 0
py = 0

Dim tile(xxx,yyy)

While Not KeyDown(1)

xx = MouseX()
yy = MouseY()
mh = MouseHit(1)
   
   For y=0 To yyy
      For x=0 To xxx
         DrawBlock bilder(tile(x,y)),x*40,y*40
      Next
   Next

   DrawImage bilder(18),xx,yy
   If mh Then
    px = ; was kommt hier hin ??????????
    py = ; und hier                   ??????????
    tile(px,py) = 8
   EndIf
   

   Flip
   Cls
   
Wend

End

wie muss ich das anpacken/rechnen ?

mfg
Mein aktuelles Projekt, Irnithal: http://www.blitzforum.de/worklogs/415/

Unfreiwilliger Gewinner des BAC# 115. Wink

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSo, März 30, 2008 15:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Bei so vielen Bildern bei auch noch gleicher größe, würde ich diese in ein Bild packen und per LoadAnimImage laden.

Deine Positionierung ist folgende:

Mapposition = ( Mausposition / Tilekantenlänge ) + Offset

Wobei Offset nur benötigt wird, wenn die Map nicht links/oben vom Bildschirm anfängt.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

Moep

BeitragSo, März 30, 2008 15:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich würde dir empfehlen eines der vielen Tilemap tutorials anzuschauen. Es gibt ja genug davon@Suche.


mfg
Hardstyle Schleichwerbung:
http://www.youtube.com/user/Hackepeter42

Achtung: Suchtgefahr!
moep123.ohost.de

Blitzprogger

BeitragSo, März 30, 2008 18:34
Antworten mit Zitat
Benutzer-Profile anzeigen
hi nochmals

ich bastel nun an nem editor, das klappt alles gut bis auf das problem dass wenn ich in ein anderes fenster gehe ( das ich in einer function geschrieben habe) komm ich nicht mehr zurück zur benutzeroberfläche ( der editor den ich nicht in einer function geschrieben habe weil es sonst nicht geht). kennt ihr einen befehl der das programm zu einem früheren punkt im code führt? danke für die geduld Very Happy

mfg
Mein aktuelles Projekt, Irnithal: http://www.blitzforum.de/worklogs/415/

Unfreiwilliger Gewinner des BAC# 115. Wink

Caesium

BeitragSo, März 30, 2008 18:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
code....
.marke
code....
Goto marke
code....


Goto springt zu einer marke, die vorher im code mit einem . vornedran definiert wurde. ist allerdings eine sehr unschöne lösung, da die übersichtlichkeit darunter leidet, vor allem im häufigeren gebrauch.

gruß,
caesium
Der Vorteil der Klugheit liegt darin, dass man sich dumm stellen kann. Das Gegenteil ist da schon schwieriger. Smile

TimBo

BeitragSo, März 30, 2008 18:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,

also ich verstehe das nicht, friert dein Prog ein?

oder schau ma wenn du sowas hast
Code: [AUSKLAPPEN]
if fenster2 then fenster()

wenn du sowas in der art hast, musst du dafür sorgen, dass fenster2 wieder false wird.

ansonsten kommst du doch raus wenigstens beim nächsten schleifendurchgang der main schleife.

im Notfall kannst du doch GoTo und GoSub -> Blitzbase.de
nachschauen ^^

mfg
Intel ViiV Quad-Core
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31
hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht.

Eingeproggt

BeitragSo, März 30, 2008 19:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Und wieso gibt hier niemand ql:Return als Lösung an?
Wenn man in einer Funktion feststeckt nicht nur die eleganteste sondern auch die einfachste Lösung.

mfG, Christoph

Blitzprogger

BeitragSo, März 30, 2008 19:43
Antworten mit Zitat
Benutzer-Profile anzeigen
return begreife ich nicht Embarassed
hier mal meinCode: [AUSKLAPPEN]
Graphics 800,600,16,1
SetBuffer BackBuffer()

Dim bilder(18)
bilder(0) = LoadImage("wiese.bmp")
bilder(1) = LoadImage("weg1.bmp")
bilder(2) = LoadImage("weg2.bmp")
bilder(3) = LoadImage("weg3.bmp")
bilder(4) = LoadImage("weg4.bmp")
bilder(5) = LoadImage("weg5.bmp")
bilder(6) = LoadImage("weg6.bmp")
bilder(7) = LoadImage("mauerweg.bmp")
bilder(8) = LoadImage("baum.bmp")
bilder(9) = LoadImage("felsen.bmp")
bilder(10) = LoadImage("mauer.bmp")
bilder(11) = LoadImage("turm.bmp")
bilder(12) = LoadImage("mauer2.bmp")
bilder(13) = LoadImage("haus1.bmp")
bilder(14) = LoadImage("haus2.bmp")
bilder(15) = LoadImage("haus3.bmp")
bilder(16) = LoadImage("haus4.bmp")
bilder(17) = LoadImage("platz.bmp")
bilder(18) = LoadImage("mausli.bmp")

Global xxx = Input("geben sie bitte die menge x-tiles (max.20) ein: ")
Global yyy = Input("geben sie bitte die menge y-tiles (max 15) ein: ")
Global xxxx = xxx - 1
Global yyyy = yyy - 1
Global px = 0
Global py = 0
Global aus = 8

If lol = 0 Then edit

Dim tile(xxx,yyy)

;************************************************************************************************

Function edit() ; das war ein versuch das programm auf diese stelle zu bringen
End Function

While Not KeyDown(1)

  xx = MouseX()
  yy = MouseY()
  mh = MouseDown(1)
  md = MouseDown(2)
   
   For y=0 To yyyy
      For x=0 To xxxx
         DrawBlock bilder(tile(x,y)),x*40,y*40
      Next
   Next

   If KeyHit(57) Then auswahl

   DrawImage bilder(18),xx,yy
   If mh Then
    px = xx / 40
    py = yy / 40
    tile(px,py) = aus
   EndIf
   If md Then
    px = xx / 40
    py = yy / 40
    tile(px,py) = 0
   EndIf

   Flip
   Cls
   
Wend

;*****************************************************************************************************

Function auswahl()

 While Not KeyDown(1)

  xx = MouseX()
  yy = MouseY()
  mh = MouseDown(1)
  md = MouseDown(2)

 Rect 20,20,760,560
 
 DrawBlock bilder(1),600,40
 DrawBlock bilder(2),600,80
 DrawBlock bilder(3),600,120
 DrawBlock bilder(4),600,160
 DrawBlock bilder(5),600,200
 DrawBlock bilder(6),600,240
 DrawBlock bilder(7),600,280
 DrawBlock bilder(8),600,320
 DrawBlock bilder(9),600,360
 DrawBlock bilder(10),600,400
 DrawBlock bilder(11),600,440
 DrawBlock bilder(12),600,480
 DrawBlock bilder(13),600,520
 DrawBlock bilder(14),640,40
 DrawBlock bilder(15),640,80
 DrawBlock bilder(16),640,120
 DrawBlock bilder(17),640,160

 Text 600,40, "nr.0"
 Text 600,80, "nr.1"
 Text 600,120, "nr.2"
 Text 600,160, "nr.3"
 Text 600,200, "nr.4"
 Text 600,240, "nr.5"
 Text 600,280, "nr.6"
 Text 600,320, "nr.7"
 Text 600,360, "nr.8"
 Text 600,400, "nr.9"
 Text 600,440, "nr.10"
 Text 600,480, "nr.11"
 Text 600,520, "nr.12"
 Text 640,40, "nr.13"
 Text 640,80, "nr.14"
 Text 640,120, "nr.15"
 Text 640,160, "nr.16"

 Locate 30,30
 aus = Input("Nr. : ")

   DrawImage bilder(18),xx,yy

 If KeyHit(57) Then edit

 Flip
 Cls

 Wend

End Function

End

ist viel code ^^ ich hoffe ihr seht das problem

mfg
Mein aktuelles Projekt, Irnithal: http://www.blitzforum.de/worklogs/415/

Unfreiwilliger Gewinner des BAC# 115. Wink

Gehe zu Seite 1, 2  Weiter

Dieses Thema ist gesperrt, du kannst keine Beiträge editieren oder beantworten.


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group