Kein Zugriff auf Array?

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Waterguy

Betreff: Kein Zugriff auf Array?

BeitragDi, Jul 01, 2008 21:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Nabend, mal wieder ein kleines Problemchen Embarassed Laughing

Und zwar gehts diesmal um die Kollisionsabfrage zwischen Spieler und Tile. Vorerst kann der Spieler sich nur mit den Pfeiltasten (hoch,runter,links,rechts) über das Bild bewegen. Dabei soll er bei einem bestimmten Tile nicht weiter kommen, also Kollisionsabfrage. Hab's mit Imagescollide(), ImageRectCollide() und RectsOverlap() probiert - nix klappt. Die Tiles werden in einem Array gespeichert (da vorher die Map mit Editor erstellt wurde) - auf die ich keinen Zugriff hab.

Die Arrays versuche ich mit grafik(1) (als Beispiel) anzusprechen. Aber ich kann nichtmal den MaskImage Befehl darauf anwenden. Der Code folgt hier:

Code: [AUSKLAPPEN]
Graphics 1280,1024,256,1
SetBuffer BackBuffer()
ClsColor 255, 0, 255

Global datei

Dim grafik(4)
Dim map(32,32)
px = 100
py = 600


player = LoadImage("dude.bmp")
   MaskImage player,255,0,255

For x = 1 To 4
   grafik(x) = LoadImage("tile" + Str$(x) + ".bmp")
   MaskImage grafik(x), 255, 0, 255
Next



auswahl$ = Input("Level laden? (j/n) - ")
If auswahl$ = "j" Then
   mapname$ = Input("Levelcode eingeben - ")
   datei=ReadFile(mapname$ + ".map")
   For y=0 To 31
      For x=0 To 31
      map(x,y)=ReadLine(datei)
      Next
   Next
   CloseFile datei
EndIf


Repeat

If KeyHit(1) Then End


For y=0 To 31
   For x=0 To 31
      DrawBlock grafik(map(x,y)),x*32,y*32
   Next
Next


DrawImage player,px,py
If KeyDown(205) Then px = px + 2
If KeyDown(208) Then py = py + 2



Flip
Forever
End   
Projekte:

Jubinator (Jump'n'Run) zu 10% fertig
 

buja

BeitragDi, Jul 01, 2008 22:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Also nen direkten Fehler habe ich auf die schnelle nicht gefunden.

Code: [AUSKLAPPEN]

Graphics 1280,1024,256,1
SetBuffer BackBuffer()
ClsColor 255, 0, 255

Global datei

Dim grafik(4)
Dim map(32,32)
px = 100
py = 600


player = LoadImage("dude.bmp")
MaskImage player,255,0,255

For i = 1 To 4      ;Du benutzt x schon unten, nimm hier lieber i oder ne andere variable
   grafik(i) = LoadImage("tile" + Str$(x) + ".bmp")
   MaskImage grafik(x), 255, 0, 255
Next



auswahl$ = Input("Level laden? (j/n) - ")
If auswahl$ = "j" Then
   mapname$ = Input("Levelcode eingeben - ")
   datei=ReadFile(mapname$ + ".map")
   For y=0 To 31
      For x=0 To 31
         map(x,y)=ReadLine(datei)
      Next
   Next
   CloseFile datei
EndIf


Repeat
   
   If KeyHit(1) Then End
   
   
   For y=1 To 32   ;Du hast doch dim map(32,32) gemacht? dannkannst du auch 1-32 nehmen ;)
      For x=1 To 32
         DrawBlock grafik(map(x,y)),x*32,y*32
      Next
   Next
   
   
   DrawImage player,px,py
   If KeyDown(205) Then px = px + 2
   If KeyDown(208) Then py = py + 2
   
   
   
   Flip
Forever
End   


Nur so kleinigkeiten, wenn du mir das Projekt mal schickst mit Dateien kann ich das ausprobieren und vll nen Fehler finden oder das beheben.

Meine ICQ: 487123402
...

hectic

Sieger des IS Talentwettbewerb 2006

BeitragDi, Jul 01, 2008 22:48
Antworten mit Zitat
Benutzer-Profile anzeigen
- Die Farbtiefe von 256 gibt es nicht Graphics 1280,1024,256,1

- Die Zeile mit ReadLine solltest du noch einmal überdenken ''map(x,y)=ReadLine(datei)'' denn, Readline liest eine ganze Zeile einer Datei aus. Ich nehme an, dass die Daten aber nicht jede Zeile durch Chr$(10] und Chr$(13] um das dreifache aufgebläht wurden.

- Nur so als Tipp: DrawBlock und DrawImage unterscheiden sich genau auf das, was eines deiner Frage ist. Die deutsche OH sollte dir da weiter helfen.

- Ausserdem kannst du auch gleich per Frames unterschiedliche Images ansprechen. Das würde dir wesentlich die unnötige Arbeit ersparen. Ist aber Geschmackssache.

- Normalerweise macht man erst Variablenberechnung und dann erst das Zeichnen der Grafik. In deinem Beispiel ist die Playersteuerung genau nicht so.

- In deinem geposteten Code gibt es keine Ansätze auf eine Kollisionsabfrage die wir zu kontrollieren könnten. Daher kann dir auch niemand diese Frage bezogen auf dein Code beantworten.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D
 

Waterguy

BeitragMi, Jul 02, 2008 12:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Den Graphics-Fehler hab ich korrigiert, weiß auch nicht warum ich immer 256 dahin schreib Rolling Eyes .

Den Editor hab ich nach dem Editor-Tutorial von robsite.de geschrieben und ein wenig abgewandelt um es bedienerfreundlicher zu machen.

Das mit der Variablenberechnung war ein Denkfehler, werd ich auch noch korrigieren.

Die Kollisionsabfrage habe ich rausgenommen, da meine Frage nicht speziell darauf bezogen war, sondern generell auf das Problem das ich das Array grafik(x) nicht ansprechen kann, egal bei welcher Situation.
Projekte:

Jubinator (Jump'n'Run) zu 10% fertig
 

Waterguy

BeitragMi, Jul 02, 2008 13:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
If ImagesCollide(dude,dx,dy,0,grafik(1),x*32,y*32,0) Then dy = x*32 + 64


Das hier wäre die Kollisionsabfrage, die nicht funktioniert - Wenn der Spieler (dude) mit dem Tile das in grafik(1) geladen ist zusammenstößt soll er halt nicht hindurch "fallen".

Edit: Den Zugriff auf grafik(x) hab ich hinbekommen, nur die Kollisionsabfrage klappt nicht
Projekte:

Jubinator (Jump'n'Run) zu 10% fertig

FunctionBauer

BeitragFr, Jul 04, 2008 17:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Das kann auch noch mit was ganz Anderem zusammenhaengen! Wenn du nur auf den oberen Teil guckst, wird das nix!!!!!
 

Waterguy

BeitragSa, Jul 05, 2008 13:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Okay, Kollisionsabfrage klappt inzwischen auch Wink Lag wohl an den Variablen. Hab die in falschem Zusammenhang geschrieben.
Projekte:

Jubinator (Jump'n'Run) zu 10% fertig

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group