problem mit tiles

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

captain kwirkby

Betreff: problem mit tiles

BeitragDi, Jun 10, 2008 20:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo! Ich will einen "Sim-City Klon" machen(nicht so was kompliziertes, sondern erst mal um zu gucken wie man mit tiles umgeht usw.), aber wenn man bei aktiviertem Straßenbaumodus Klickt, dann kommt einfach kein stück Straße!

Code: [AUSKLAPPEN]

Graphics 800,600,32,2
SeedRnd MilliSecs()
Global mouse = CreateImage(32,32);Das "mausbild"
Global empty = CreateImage(32,32);Um die maus "zurückzusetzen"
SetBuffer BackBuffer()
Global tileset1     = LoadAnimImage("tiles01.bmp",32,32,0,10)
Global streetbutton = LoadAnimImage("streetbutton.bmp",50,50,0,2)
Global street = LoadAnimImage ("streettile.bmp",32,32,0,6)
Dim baumodi(1);Die Baumodi
Global mx = MouseX()/32
Global my = MouseY()/32

MaskImage streetbutton,255,0,0
MaskImage tileset1,255,0,0

Dim nr(1); Die Frames(fuer alles)
nr(0) = 1 ;Wegen Malfehler ;)
Dim map(17,17)
For y = 0 To 17
For x = 0 To 17
s = Rand(20)
If s = 10 Then
booley = Rand(0,3)
Else booley = 0
End If
map(x,y) = booley
Next
Next
;------------MAINLOOP----------------------------
While Not KeyHit(1)
Cls
DrawMap()
mx = MouseX()/32
my = MouseY()/32


If ImagesOverlap(mouse,MouseX(),MouseY(),streetbutton,576,100) And MouseHit(1) Then

If baumodi(0) = 1 Then
baumodi(0) = 0
nr(0) = 1
mouse = empty
Else
baumodi(0) = 1
nr(0) = 0
End If
End If
If Baumodi(0) = 1 Then
mouse = street
If MouseHit(2) Then
nr(1) = nr(1) + 1
If nr(1) = 6 Then nr(1) = 0
End If
If MouseHit(1) Then
mx = MouseX()/32
my = MouseY()/32

map(mx,my) = 4
End If
End If

Flip
Wend
;-----------FUNCTIONS----------------------------
Function DrawMap()
For y = 0 To 17
For x = 0 To 17
DrawImage tileset1,x*32,y*32,map(x,y)
Next
Next
Color 128,128,128
Rect 576,100,50,300
DrawImage streetbutton,576,100,nr(0)
DrawImage mouse,MouseX(),MouseY(),nr(1)
End Function


Könnt ihr mir da helfen?
99 % aller Amokläufer essen Brot. Verbietet Brot!!!

robotx

BeitragDi, Jun 10, 2008 22:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Speichere die MouseHit Abfragen vorher in einer Variablen und benutze dann diese.

Code: [AUSKLAPPEN]
...
;Hauptschleife
mHit1 = MouseHit (1)

If ImagesOverlap(mouse,MouseX(),MouseY(),streetbutton,576,100) And  mHit1    Then
....
....


Ebenso mit MouseHit (2) und bei allen anderen Stellen an denen MouseHit () genutzt wird.

mfg robotx
www.botbomb.robotzgames.de
www.robotzgames.de

theotheoderich

BeitragMi, Jun 11, 2008 11:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
Speichere die MouseHit Abfragen vorher in einer Variablen und benutze dann diese.


Völlig korrekt, das kann Wunder wirken. Ich bin daran auch anfangs verzweifelt, da ich immer die Maus direkt abgefragt habe.
Gruß
TheoTheoderich
--
The box label said, "Requires Windows XP or better.", so I bought an Amiga Computer.
 

captain kwirkby

BeitragMi, Jun 11, 2008 14:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke, jetzt klappt es eingentlich. Ich habe nur noch ein problem:
Code: [AUSKLAPPEN]

If Baumodi(0) = 1 Then
mouse = street
If Mhit2 Then
nr(1) = nr(1) + 1
If nr(1) = 6 Then nr(1) = 0
End If
If Mhit1 Then
mx = MouseX()/32
my = MouseY()/32
map(mx,my) = 4
End If
End If

Wenn ich jetzt auf den streetbutton klicke, meint er "Array index out of bounds"
99 % aller Amokläufer essen Brot. Verbietet Brot!!!

theotheoderich

BeitragMi, Jun 11, 2008 14:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Du solltest Dir angewöhnen Zeilen in Abfragen/Schleifen einzurücken, dass macht die ganze Sache deutlich übersichtlicher.

"Array index out of bounds" .....wenn Du map(mx,my) schreibst und vorher z. B. Dim map(128,128) definiert hast und dann mx oder my >127 ist, dann kommt diese Meldung.

Quasi wenn Du mit der Maus über den Kartenrand hinaus gehst.

Kannst Du abfangen, wenn Du z. B. Global mapsize=128 definierst und dann Dim map(mapsize,mapsize). Vor map(mx,my) = 4 überprüfst Du ob mx und my >=0 und <mapsize sind.
Gruß
TheoTheoderich
--
The box label said, "Requires Windows XP or better.", so I bought an Amiga Computer.
 

captain kwirkby

BeitragMi, Jun 11, 2008 14:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke jetzt hats geklappt! Very Happy
99 % aller Amokläufer essen Brot. Verbietet Brot!!!

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group