Problem bei meiner Tilemap

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

Julz

Betreff: Problem bei meiner Tilemap

BeitragSo, Dez 21, 2003 20:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]

graphics 640,480
setbuffer backbuffer()

tileset = loadanimimage("sprites.bmp",32,32,0,4)
player= loadimage("yes.bmp")

x = 40
y = 50
dim map(9,9)

data 1,1,1,1,1,1,1,1,1,1
data 1,3,3,3,3,3,3,3,3,1
data 1,0,0,0,0,0,0,0,3,1
data 1,0,0,0,0,0,0,0,3,1
data 1,0,0,0,0,0,0,0,3,1
data 1,0,0,2,2,0,0,0,3,1
data 1,0,0,2,2,0,0,0,3,1
data 1,0,0,0,0,0,0,0,3,1
data 1,0,0,0,0,0,0,0,3,1
data 1,1,1,1,1,1,1,1,1,1
for y = 0 to 9
for x = 0 to 9
read map(x,y)
next
next

repeat
cls


for y = 0 to 9
for x = 0 to 9
drawimage tileset, x*32, y*32, map(x,y)
next
next

for x = 0 to 9
for y = 0 to 9
if keydown(205) and map(x+1,y) = 0 then movex = movex + 1
if keydown(203) and map(x-1,y) = 0 then movex = movex - 1
if keydown(200) and map(x,y-1) = 0 then movey = movey - 1
if keydown(208) and map(x,y+1) = 0 then movey = movey + 1
next
next
drawimage player, movex, movey

flip
until keydown(1)



Ich hab mir das tutorial auf der robsite durchgelesen und hab danach selbst ma was gemacht, allerdings läuft mein dummer player immer noch
durch die map ohne vor stehen zu bleiben wenn ein tile größer als 0 ist Confused
 

Zwische

BeitragSo, Dez 21, 2003 20:58
Antworten mit Zitat
Benutzer-Profile anzeigen
irgendwie hast du da variablen vertauscht.
so müsste es gehen:

if keydown(205) and map(movex+1,movey) = 0 then movex = movex + 1
if keydown(203) and map(movex-1,movey) = 0 then movex = movex - 1
if keydown(200) and map(movex,movey-1) = 0 then movey = movey - 1
if keydown(208) and map(movex,movey+1) = 0 then movey = movey + 1
www.bitbybit-creations.net

Julz

BeitragSo, Dez 21, 2003 21:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Also dann hab ich zwei fragen
1. das versteh ich nicht, warum die bewegungsvaribale, in der map(x,y) da sind doch die daten über die tilemap gespeichert oder ???
2.Irgendwie funst das nicht so ganz der ruckelt nur so komisch rum ka warum (nagut ist keine frage)[/code]
 

Zwische

BeitragSo, Dez 21, 2003 21:08
Antworten mit Zitat
Benutzer-Profile anzeigen
zu 1.
Code: [AUSKLAPPEN]

if keydown(205) and map(movex+1,movey) = 0 then movex = movex + 1

hier willst du doch abfragen, ob rechts neben dem Spieler, also movex+1 ein Tile ist das denn Spieler blockiert oder nicht, deshalb die variable movex, die doch eine Koordinate des Spielers ist

zu 2.
schreib mal das hier:
drawimage player, movex*32, movey*32
www.bitbybit-creations.net
 

CodeMaster

BeitragSo, Dez 21, 2003 23:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Ein Problem besteht sicherlich auch darin, dass BB folgende Zeile nicht korrekt interpretieren kann:Code: [AUSKLAPPEN]
if keydown(205) and map(movex+1,movey) = 0 then movex = movex + 1
Wenn du mehr als eine Bedingung überprüfen willst, musst du jede bedingung einzeln einklammern. Sollte dann so lauten:Code: [AUSKLAPPEN]
if (keydown(205)) and (map(movex+1,movey) = 0) then movex = movex + 1
Ansonsten hätte BB versucht, deinen Code in etwa so zu interpretieren:Code: [AUSKLAPPEN]
if (keydown(205) AND map(movex+1,movey)) = 0 then movex = movex + 1
(AND fungiert hier als ein mathematischer Operator, was natürlich nicht zum gewünschten Ergebnis führt!)
Dies ist ein Text, der an jeden Beitrag von dir angehängt werden kann. Es besteht eine Limit von 500 Buchstaben.

Zuletzt bearbeitet von CodeMaster am Mo Apr 01, Parse error: syntax error, unexpected ';' in htdocs\viewtopic.php on line 102
 

Alu-Folie

Gast

BeitragSo, Dez 21, 2003 23:36
Antworten mit Zitat
Das kann man auch mit 2 If-Abfragen lösen. So mache ich das immer, weil mir AND und OR usw. unsymphatisch ist Very Happy.

Hubsi

BeitragMo, Dez 22, 2003 10:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
Ein Problem besteht sicherlich auch darin, dass BB folgende Zeile nicht korrekt interpretieren kann:Code:
if keydown(205) and map(movex+1,movey) = 0 then movex = movex + 1
Wenn du mehr als eine Bedingung überprüfen willst, musst du jede bedingung einzeln einklammern. Sollte dann so lauten:Code:
if (keydown(205)) and (map(movex+1,movey) = 0) then movex = movex + 1
Wie kommst Du denn auf den Quatsch Codemaster Question Smile

Gleich noch für die ungläubigen unter Euch:
Code: [AUSKLAPPEN]
a=1
If a And b=0 Then Print "Super"
WaitKey()
End
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...
 

CodeMaster

BeitragMo, Dez 22, 2003 16:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie kommst Du denn auf den Quatsch Hubsi Question Smile
Was du postest, ist schlichtweg falsch.
Für Dich Ungläubigen hier ein Beispiel: Code: [AUSKLAPPEN]
A = 2
B = 32
If A And B = 32 Then Print "Bedingung erfüllt"
Und jetzt sag mir, dass das korrekt ist!!!
Aber ich will ja keine Schlammschlacht anzetteln (jeder kann mal Fehler machen), deswegen hier eine kleine Erklärung:
a ist 1. Okay
b ist 0. Okay
"a AND b" ist 0. Okay.
Wenn also "a AND b" = 0 ist, ist die Bedingung erfüllt. Logisch.
Dies ist ein Text, der an jeden Beitrag von dir angehängt werden kann. Es besteht eine Limit von 500 Buchstaben.

Zuletzt bearbeitet von CodeMaster am Mo Apr 01, Parse error: syntax error, unexpected ';' in htdocs\viewtopic.php on line 102

D2006

Administrator

BeitragMo, Dez 22, 2003 16:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Friede sei mit euch!
Hubsi hat recht.
Ein Bedingung ist dann wahr, wenn sie "1" ist.
Code: [AUSKLAPPEN]

a=1
If a Then Print "toll"

Funktioniert somit

Bei CodeMaster ist die erste Bedingung aber 2 und somit ungleich 1, also 0, also FALSCH.
Deswegen wird "Bedingung erfüllt" nicht erscheinen

Ich habs ausprobiert (solltet ihr auch)
MfG
Frohe Weihnacht
 

CodeMaster

BeitragMo, Dez 22, 2003 16:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Wäääää, noch so ein Möchtegern!

Zur Aufkläfung von der booleanischen Urteilung von BB:
Exakt 0 ist false/falsch/unwahr.
Alles, was nicht 0 (also von -Unendlich bis +Unendlich außer 0) ist, ist true/richtig/wahr.

[Edit]
Für alle "Immernochungläubigen" hier mal was zum Ausprobiueren:Code: [AUSKLAPPEN]
Print "32 and 2:  " + (32 And 2)
Print "32 and 39: " + (32 And 39)
Print "32 or 2:   " + (32 Or 2)
Print "32 or 39:  " + (32 Or 39)
WaitKey()
End


Und noch ein ganz persönliches [Edit] an D2006:
Nach deiner Theorie müsste ja folgender Code nicht möglich sein:Code: [AUSKLAPPEN]
a = 2
If a then print "a ist wahr"
Waitkey()
End
Hmmmmmm, komisch nur dass er doch funktioniert!

[Weitere Anmerkung]
Dann probier doch einfach mal diesen Code hier:Code: [AUSKLAPPEN]
A = 2
B = 32
If (Not A = False) And (B = 32) Then Print "Bedingung erfüllt"
WaitKey()
End
In meinem originalen Code von oben habe ich gar nicht beabsichtigt, dass die Bedingung erfüllt ist. Jetzt erst habe ich ihn so umprogrammiert, dass er absichtlich funktioniert. Und nix für ungut, aber ich programmiere seit über 10 Jahren.
Dies ist ein Text, der an jeden Beitrag von dir angehängt werden kann. Es besteht eine Limit von 500 Buchstaben.

Zuletzt bearbeitet von CodeMaster am Mo Apr 01, Parse error: syntax error, unexpected ';' in htdocs\viewtopic.php on line 102
  • Zuletzt bearbeitet von CodeMaster am Mo, Dez 22, 2003 17:07, insgesamt 6-mal bearbeitet

D2006

Administrator

BeitragMo, Dez 22, 2003 16:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe mich auf ein niedriges Niveau herabgelassen, eils unrecht gehabt und mich eines besseren belehren lassen. Sorry.

Julz

BeitragDi, Dez 23, 2003 19:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Also bevor hier ein krieg ausbricht lassen wir das ganze lieber Wink

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group