Wo ist der Fehler (kollision)

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

pille24

Betreff: Wo ist der Fehler (kollision)

BeitragSo, Jan 01, 2006 4:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,
probiere grad ein bisschen mit Blitz Basic rum, habe allerdings probs mit der Kollision. Hier ist der Code:
BlitzBasic: [AUSKLAPPEN]
Graphics 1024,768,16,1
SetBuffer BackBuffer()

tileset = LoadAnimImage(\"tileset.bmp\",32,32,0,4)
spieler = LoadImage(\"dude.bmp\")
MaskImage spieler,255,0,255
Global x1,y1
x1=100
y1=100
Dim map(31,23)

Data 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2
Data 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2
Data 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2
Data 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2
Data 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2
Data 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2
Data 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2
Data 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2
Data 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2
Data 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2
Data 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2
Data 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2
Data 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2
Data 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2
Data 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2
Data 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2
Data 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2
Data 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2
Data 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2
Data 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2
Data 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2
Data 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2
Data 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2
Data 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2

For y=0 To 23
For x=0 To 31
Read map(x,y)
Next
Next


Repeat
Cls
For y=0To 23
For x=0 To 31

DrawBlock tileset,x*32,y*32,map(x,y)
Next
Next
KollisionOben = map( y1 - 1, x1 )
KollisionRechts = map( y1, y1 + 1 )
KollisionUnten = map( y1 + 1, x1)
KollisionLinks = map( y1, x1 - 1 )

If KeyDown(205) Then
If KollisionOben = False
y1 = y1 - 1

EndIf

If KeyDown( 205 )
If KollisionRechts = False
x1 = x1 + 1

EndIf
EndIf

If KeyDown( 208 )
If KollisionUnten = False
y1 = y1+ 1
EndIf
EndIf

If KeyDown( 203 )
If KollisionLinks = False
x1 = x1 - 1

EndIf
EndIf
EndIf
DrawImage spieler,x1,y1

Flip
Until KeyHit(1)
End

Leider startet er gar nicht erst das 'Spiel' sondern ebscchwert sich über 'Illegal Memory Address'
Ich weiß leider nicht wo der Fehler liegt.
HAt jemand vone uch eine Idee?
[/code]

SoNenTyp

BeitragSo, Jan 01, 2006 4:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Der Debugger müsste dir eigentlich die Zeile nennen in der der Fehler auftrat.

Code: [AUSKLAPPEN]
If KeyDown(205) Then
 If KollisionOben = False
    y1 = y1 - 1
       
  EndIf


Außerdem hast du dich hier wohl verschrieben. Das müsste warscheinlich eine 200 sein keine 205. Desweiteren hast du danach ein Endif vergessen und es am ende der Tastenabfrage hin gemacht. Dadurch hat diese abfrage Priorität und die anderen werden nur durchgeführt wenn du die taste 200 (205) drückst.
Gruss Der Typ.

User posted image

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSo, Jan 01, 2006 8:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Also erstmal solltest du vielleicht deine Formatierungsregeln nochmal überdenken. Es ist echt nicht leicht sich in so einem Code wieder zu finden. Smile Folgende Fehler konnte ich bereits feststellen...

1) Verwechselst du die x und y -Koordinaten bei der Kollisionsvergabe an Variablen (beispiel: KollisionOben=map(y1-1,x1)... Es steht dem Programmierer frei zu endscheiden, welche Koordinaten zuerst kommt. Weiter unten hast du es aber wieder 'richtig' rum. Somit übereinstimmen die Bewegungskoordinaten mit der der Kollision nicht. Erspare dir weitere Probleme und nimm immer die Reihenfolge des Alphabeth (X,Y,Z). Bei den For/Next-Schleifen kann man dies so machen, wenn man möchte das die Map Zeilenweise gezeichnet werden soll.

2) x1=100 und y1=100 befinden sich bereits ausserhalb des Bildschirmes, was einen Index out of Bounds verursacht. Endscheide dich wie du auf die Map zeichnen und wie du deine Bilder in der Map 'kollidieren' lassen möchtest. Folgende Möglichkeiten:

2a) x1#=100 etc. KollisionOben=map(x1/32,(y1/32)-32) etc. DrawImage spieler,x1,y1

2b) x1%=2 etc. KollisionOben=map(x1,y1-1) etc. DrawImage spieler,x1*32,y1*32

Die beiden unterscheiden sich dadurch, daß bei 2a, eine Bewegungseinheit einen Pixel groß ist, bei 2b, eine Bewegungseinheit einen Tile (32 Pixel) groß ist. Je nachdem was für dich besser passt.

3) Die bereits von SoNenTyp beantwortete Fehlerbeschreibung.

4) Ist kein Fehler aber nicht grad 'reourcesschonend' programmiert. Wozu fragst du bereits im Vorwege den Kollisionsradius ab, auch dann wenn dieser garnicht benötigt wird? Schnellerer Code geht beispielsweise so (ganz ohne KollisionOben/Unten/Links/Rechts -Variable).
Code: [AUSKLAPPEN]
If KeyDown(203) Then
 If map(x1-1,y1)=0 Then
  x1=x1-1
 End If
End If
Oder kürzerer Code aber langsamer...Code: [AUSKLAPPEN]
If KeyDown(203)=1 And map(x1-1,y1)=0 Then x1=x1-1


So, und jetzt erstmal begrüße ich dich als neues Mitglied hier im Forum. Und, überdenke mal deine Formatierungsregeln. Ist mir echt ein Dorn im Auge...

/EDIT: Achja, versuche dir mal anzugewöhnen (vielleicht hättest du es ja auch bereits so gemacht), eine Antwort zu schreiben. Auch dann, wenn du nach einer Hilfe keine Probleme mehr haben solltest. Es geht nicht nur mir so, daß es recht 'nervig', 'unschön' etc. ist keine Antwort daraufhin zu bekommen, wenn man zum Teil sehr viel Zeit dafür investiert...
 

pille24

BeitragSo, Jan 01, 2006 13:10
Antworten mit Zitat
Benutzer-Profile anzeigen
vielen Dank. Das hilft mir enorm.
BlitzBasic ist schon ein bisschen schwieriger als das was ich dovor gemacht habe;)

Werde das jetzut erst mal alles verbessern.
Aber da werden bestimmt noch mehr fragen kommen.
 

pille24

BeitragSo, Jan 01, 2006 15:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Nächste Probleme:
Ich habe es jetzt folgender maßen gemacht:
BlitzBasic: [AUSKLAPPEN]
 KollisionOben=map(x1/32,(y1/32)-32) 
KollisionLinks=map((x1/32)-32,y1/32)
KollisionRechts = map( (x1/32)+32, y1/32 )
KollisionUnten = map( x1/32, (y1/32)+32)

Das ist die Kollisionsabfrage.
x1 und y1 sind so definiert.
BlitzBasic: [AUSKLAPPEN]
 x1#=100
y1#=100

Und die Bewegungsabfrage:
BlitzBasic: [AUSKLAPPEN]
If KeyDown( 205 )
If KollisionRechts = False
x1 = x1 + 4
EndIf
EndIf
If KeyDown( 203 )
If KollisionLinks = False
x1 = x1 - 4

EndIf
EndIf

und dann noch den Spieler zeichnen:
BlitzBasic: [AUSKLAPPEN]
DrawImage spieler,x1,y1

Jetzt kommt allerdings immer der Fehler bei der allerersten Kollisionsabfrage 'Array Index Out of Bounds'.

Und dann noch das Springen: Wie kann ich es machen, dass der SPieler nach einer gewissen ZEit wieder zurückfällt zu seiner ursprünglichen Position? ALso sowas Wie Delay...

hectic

Sieger des IS Talentwettbewerb 2006

BeitragMo, Jan 02, 2006 0:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi pille, hatte wohl mein Verstand irgendwo liegen gelassen. Richtig ist...Code: [AUSKLAPPEN]
KollisionOben=map(x1/32,(y1/32)-1)
KollisionLinks=map((x1/32)-1,y1/32)
KollisionRechts=map((x1/32)+1,y1/32)
KollisionUnten=map(x1/32,(y1/32)+1)
 

pille24

BeitragMo, Jan 02, 2006 1:13
Antworten mit Zitat
Benutzer-Profile anzeigen
vielend dank,
ich hatte mich schon gewundert, aber dann hab ich gedacht, ich fange ja grad erst an, wird schon richig sein.

pille24


€dit: funzt mehr oder weniger, die Kollisionsabfrage ist jetzt nämlich irgendiwe ziemlich selsam, d.h. sie stimmt überhaupt nicht. Hier noch mal der Code. Wäre nett wenn du mir noch einmal hilfst.

BlitzBasic: [AUSKLAPPEN]
Global gr_width = 800
Global gr_height = 600
Global gr_bit = 16
Global gr_win = 2

Graphics gr_width, gr_height, gr_bit, gr_win
SetBuffer BackBuffer( )
img_matrix = LoadAnimImage(\"tileset1.bmp\",32,32,0,10)
player=LoadImage(\"dude.bmp\")
MaskImage player,255,0,255
monster=LoadImage(\"monster.bmp\")
MaskImage monster,255,0,255

;Konstanten und Vars
Const KEY_UP = 200
Const KEY_DOWN = 208
Const KEY_Left = 203
Const KEY_Right = 205
playerx=32
playery=32







;die map

Dim map(24,18)

Data 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
Data 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
Data 1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1
Data 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
Data 1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1
Data 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
Data 1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1
Data 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
Data 1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1
Data 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
Data 1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1
Data 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
Data 1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1
Data 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
Data 1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1
Data 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
Data 1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1
Data 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
Data 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1

For y=0 To 18
For x=0 To 24
Read map(x,y)
Next
Next
;monster (zum einsammeln)
Dim monsterx(4)
SeedRnd MilliSecs()

monsterx(1)=Rand(3,7)
monsterx(2)=Rand(7,12)
monsterx(3)=Rand(12,18)
monsterx(4)=Rand(18,23)



;Hauptschleife

Repeat


For x = 0 To 24
For y = 0 To 18
DrawImage img_matrix , x*32 , y*32 , map(x,y)
Next
Next



If KeyDown(Key_UP) Then
If map((playerx/32),(playery/32)-1)=False
playery=playery-4
EndIf
EndIf
If KeyDown(Key_Down) Then
If map(playerx/32,playery/32+1)=False
playery=playery+4
EndIf
EndIf
If KeyDown(Key_Right) Then
If map(playerx/32+1,playery/32)=False
playerx=playerx+4
EndIf
EndIf
If KeyDown(Key_LEft) Then
If map(playerx/32-1,playery/32)=False
playerx=playerx-4
EndIf
EndIf


;MonsterKollision
For i=1 To 4
DrawImage monster,monsterx(i)*32,32
If ImagesCollide (player,playerx,playery,0,monster,monsterx(i)*32,32,0) Then
DrawBlock img_matrix,monsterx(i)*32,32,0
EndIf
Next

;Spieler Zeichen
DrawImage player,playerx,playery



Flip

Until KeyHit(1)
End

hectic

Sieger des IS Talentwettbewerb 2006

BeitragMo, Jan 02, 2006 3:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo pille, formatiere (einrücke) dein Code mal... Ich habe mir mal dein Code denoch mal angesehen. Die Kollisionsabfrage ist wirklich etwas seltsam gewesen. Dann fiel mir ein, daß man eine Kollisionsprüfung nur dann direkt auf das Dim-Feld machen kann, wenn die Spielfigur sich Tileweise bewegt. Das ist nun mal in deinem Beispiel nicht der Fall. Somit bin ich auf ImagesCollide umgestiegen. Ist zwar nicht so schnell, dafür werden nur die max 4 mögliche Felder um der Spielfigur umrum überprüft. Hier mal die Version.Code: [AUSKLAPPEN]
Global gr_width=800
Global gr_height=600
Global gr_bit=16
Global gr_win=2

;Grafik setzen
Graphics gr_width, gr_height, gr_bit, gr_win
SetBuffer BackBuffer()

;Bilder laden und vorbereiten
Global img_matrix = LoadAnimImage("data\blocks.bmp",32,32,0,10)
Global player=LoadImage("data\spl2.bmp")
Global monster=LoadImage("data\spl.bmp")
MaskImage player,255,0,255
MaskImage monster,255,0,255

;Konstanten und Vars
Const KEY_UP=200
Const KEY_DOWN=208
Const KEY_LEFT=203
Const KEY_RIGHT=205
playerspeed=2
playerx=96
playery=96

;Die Map
Dim map(24,18)
Data 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
Data 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
Data 1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1
Data 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
Data 1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1
Data 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
Data 1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1
Data 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
Data 1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1
Data 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
Data 1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1
Data 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
Data 1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1
Data 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
Data 1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1
Data 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
Data 1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1
Data 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
Data 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1

;Level einlesen
For y=0 To 18
 For x=0 To 24
  Read map(x,y)
 Next
Next

;monster (zum einsammeln)
Dim monsterx(4)
SeedRnd MilliSecs()

monsterx(1)=Rand(3,7)
monsterx(2)=Rand(7,12)
monsterx(3)=Rand(12,18)
monsterx(4)=Rand(18,23)




;Hauptschleife
While Not KeyHit(1)

 ;Map zeichnen
 For x=0 To 24
  For y=0 To 18
   DrawImage img_matrix,x*32,y*32,map(x,y)
  Next
 Next

 If KeyDown(KEY_UP) Then If kollision(playerx,playery-playerspeed)=0 Then playery=playery-playerspeed
 If KeyDown(KEY_DOWN) Then If kollision(playerx,playery+playerspeed)=0 Then playery=playery+playerspeed
 If KeyDown(KEY_RIGHT) Then If kollision(playerx+playerspeed,playery)=0 Then playerx=playerx+playerspeed
 If KeyDown(KEY_LEFT) Then If kollision(playerx-playerspeed,playery)=0 Then playerx=playerx-playerspeed

 ;MonsterKollision
 For i=1 To 4
  DrawImage monster,monsterx(i)*32,32
  If ImagesCollide (player,playerx,playery,0,monster,monsterx(i)*32,32,0) Then
   Color 255,255,0:Rect playerx-2,playery-2,ImageWidth(player)+4,ImageHeight(player)+4,1
  EndIf
 Next

 ;Spieler Zeichen
 DrawImage player,playerx,playery

 Flip
 ;Cls
Wend
End




;Kollisionsprüfung
Function kollision(xx,yy)
 For x=xx/32 To 1+xx/32
  For y=yy/32 To 1+yy/32
   If map(x,y)=1 Then
    If ImagesCollide(img_matrix,x*32,y*32,map(x,y),player,xx,yy,0) Then Return 1
   End If
  Next
 Next
End Function

Hubsi

BeitragMo, Jan 02, 2006 8:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
u=map((playerx+16)/32,(playery-2)/32,0)  ; Oben / Up
r=map((playerx+32)/32,(playery+16)/32,0) ; Rechts / Right
d=map((playerx+16)/32,(playery+32)/32,0) ; Unten / Down
l=map(playerx/32,(playery+16)/32,0)      ; Links / Left
m=map((playerx+16)/32,(playery+16)/32,0) ; Mitte / Middle
ImagesCollide ist recht lahm Very Happy Was Du vielleicht auch noch gebrauchen kannst istCode: [AUSKLAPPEN]
temp=playery/32
playery=temp*32
damit der Spieler nach einem Sprung bzw. dem landen nicht mitten im Tile steht Smile

Ich geh dann mal ins Bett, gute Nacht...
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

5k41

BeitragMo, Jan 02, 2006 13:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Um erstmal bei deinem Grundcode zu Bleiben...mir ist noch dashier aufgefallen...ich find es etwas erkwürdig das man wenn man taste hoch drück nach unter geht...das müsstest du vielleichtso schreiben wenn sich die map beweget und net der spieler aber in deinem fall ( sry wenn ich das irgendwie falsch verstanden hab Wink )

pille24 hat Folgendes geschrieben:


If KeyDown(Key_UP) Then
If map((playerx/32),(playery/32)-1)=False
playery=playery-4
EndIf
EndIf


~Edit~
Hubsi ist dieses -2 bei der abfrage für oben beabsichtigt?
Projekte:
For a better World - Gesellschaftsspiel ( 100%)

User posted image

Hubsi

BeitragMo, Jan 02, 2006 13:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Jup, ist volle Absicht Very Happy Wenn der Spieler beispielsweise als y-Position 64, also map-Position 2, hat (oder jede andere Postition die sich glatt durch die Tilegröße teilen läßt) ergäbe sich folgendes:

64/32 == 2

Er würde also ein kleines Stück in den oberen Block reinlaufen können Smile pille's Tasten-Richtung-Kombi ist übrigens richtig Mr. Green
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

5k41

BeitragMo, Jan 02, 2006 14:41
Antworten mit Zitat
Benutzer-Profile anzeigen
ah ok... dann is das verständlich...
sry wegen dem mit der tastenabfrage hatte irgendwie wohl grad einen komischen denkfehler...natürlich ist das so richtig Laughing

PS:Bitte keinen BB-Code mehr verwenden...ich kann jetzt schon nen kaffe trinken wärend er mit DSL 1000 versucht die site zu laden Wink
Projekte:
For a better World - Gesellschaftsspiel ( 100%)

User posted image
 

pille24

BeitragMo, Jan 02, 2006 14:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke euch allen, ich leihe mir heut mal Hack'n'Play aus, da muss ich euch dann nicht immer nerven;)


@Hubsi
kannst du deinen Code bisschen besser erläutern?
dern versteh ich net so richtich.
thx

Hubsi

BeitragMo, Jan 02, 2006 16:50
Antworten mit Zitat
Benutzer-Profile anzeigen
In u,d,r... wird einfach nur der Wert gespeichert welcher entsprechend der Spielerposition in dem Maparray abgelegt ist. Die Tilenummer auf gut deutsch Very Happy Damit kannst Du dann recht einfach überprüfen ob der Spieler in die entsprechende Richung weiterlaufen kann oder ob er gerade auf einem Powerup steht oder was immer Du auch willst Very Happy Nehmen wir beispielsweise an Tiles deren Nummer größer 100 ist sind nicht begehbar, dann prüfst ds ganze einfach so:Code: [AUSKLAPPEN]
if keydown(key_up) and u<=100
  playery=playery-4
endif
;entsprechend für die anderen Richtungen
Smile
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

hectic

Sieger des IS Talentwettbewerb 2006

BeitragMo, Jan 02, 2006 22:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi Hubsi, bist du dir sicher, daß eine Kollisionskontrolle eines fliessend bewegenden Spieler auf direktem Wege der Mapinformationen ausgelegt werden kann? Das Problem ist das der Spieler ja auch eine gewisse Breite hat. Eine solche Kollisionskontrolle kann nur bei ganzen Tilesprüngen oder fliessenden Bewegungen auf den nächsten Tiles durchgeführt werden. Soll aber dem Spieler die Möglichkeit gegeben werden, daß er auch zwischen Tiles stehen bleiben kann, dann wird das ganze etwas komplizierter da dann mindestens die Breite des Spielers pro Richtung mit der er sich bewegt abgeftragt werden muß. Schlecht zu beschreiben... Ähmmm, habs nähmlich auch so ausprobiert, funzte aber nicht. Bei bestimmten Konstellationen konnte die Spielfigur über einige Tiles durchlaufen.

Hubsi

BeitragMo, Jan 02, 2006 23:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Das hat sich schon vielfach in der Praxis bewährt Very Happy Vorrausgesetzt die Spielfigur ist auch 32*32 Pixel groß, was aber bei pille der Fall ist soweit ich das richtig erkannt habe (dude.bmp und monster.bmp sind die Grafiken aus dem Tutorial von Ralf Geiger, oder ein dummer Zufall) Very Happy
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group