Hilfe beim Spiel
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
dafür musst du nichtmal was ändern und es ist immer noch ohne Sprites.
In die Enumeration müsste nur
eingefügt werden... dann das Bild mit
Laden... und am ende nur noch anstelle der weissen Box mit Drawimage() Zeichnen lassen
In die Enumeration müsste nur
Code: Alles auswählen
#Player
Code: Alles auswählen
LoadImage(#Player,"runner.bmp")
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom
Okay, sehe ich natürlich ein, hab nicht daran gedacht, dass man mit veränderter Schrittweite auch mal nicht auf Null kommen kann.Kaeru Gaman hat geschrieben:"kleiner als" ist besser, notfalls "kleiner gleich", "gleich" ist völlig unsicher.
Daran hab ich gestern abend auch nicht gedacht, dass man mit meiner Version quasi im Halbversatz durchs Wandende renne kann."Hängenbleiben" im echten Wortsinne kann der "Ball" nicht, man kann immer noch rückwärts weggehen.
an dieser Stelle ein OR zu setzen ist absolut sinnlos, da kann man gleich die komplette Abfrage weglassen.
Schlicht und einfach übersehen...und dass die Wände dicker sein sollten als der "Ball" hatte ich gestern schon mal geschrieben.
Ich hab auch keinen Code vorgekaut, denn alles, was ich zusammengestellt habe, stand so schon im Thread. Ich habe nur angenommen, dass der Threadersteller durch die Art und Weise der Einrückung an eine strukturierteren Programmiestil herangeführt wird.und irgendwelchen Code vorzukauen hätte ich ebenfalls schon gestern Mittag machen können, wenn ich das für sinnvoll gehalten hätte.
Es geht doch nicht darum, jemand anderem die Position streitig zu machen oder aus einem Thread "herauszudrängen". Ich dachte, ich könnte eine sinnvolle Ergänzung bieten...aber egal, dann mach DU halt weiter......
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
ja ok, sorry....
ich war gestern wegen einigem Anderen ziemlich angepisst, deswegen hab ich hier etwas dünnhäutig reagiert...
... was mich jetzt wirklich mal interessieren würde, warum Baba so ein problem mit Sprites hat, aber nicht mit Images.
ich hätt ja spontan auf ein Ladeproblem getippt, das hätte dan aber ja mit Images genau so auftreten müssen.
ich war gestern wegen einigem Anderen ziemlich angepisst, deswegen hab ich hier etwas dünnhäutig reagiert...
... was mich jetzt wirklich mal interessieren würde, warum Baba so ein problem mit Sprites hat, aber nicht mit Images.
ich hätt ja spontan auf ein Ladeproblem getippt, das hätte dan aber ja mit Images genau so auftreten müssen.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
- Max_der_Held
- Beiträge: 595
- Registriert: 18.04.2006 17:01
- Wohnort: Bavaria
- Kontaktdaten:
Hm.. ja eigendlich.. aber ich denke, er hat halt bisher noch nichts größeres mit sprites gemacht..?..
@Baba: wegen pointbenutzen.. mal angenommen, du willst später nen hintergrund (bild) laden:
paff, point tot..
normalerweise macht man sowas mit Tile-Raster bzw. normalem Raster, wenn du mal grafiken hernehmen willst, anstatt box/lines, oder Leute?
Oder du prüfst einfach alle Wände ab, ob sie mit spieler kollidieren WERDEN, wenn er sich bewegt, und verhindest es, wenn ja.
aber für nen Einsteiger hast'es echt gut gehalten, finde ich XD 
(auch, wenn ich ungern an Wänden hängenbleibe...)
ps: die roten quoffels: unbegehbar,
die grünen= begehbar... nur mal als Beispiel.
Ist aber nur ein Vorschlag. man kanns auch komplizierter lösen,
indem man schaut, ob alle DIREKT um den spieler liegenden würfel denn mit ihm kollidieren.. dafür braucht man dann auch raster, bei großen karten..
aber egal.. k.a.
Rasterbeispiel:
OH.. wiso des?..ziemlich angepisst

@Baba: wegen pointbenutzen.. mal angenommen, du willst später nen hintergrund (bild) laden:
paff, point tot..
normalerweise macht man sowas mit Tile-Raster bzw. normalem Raster, wenn du mal grafiken hernehmen willst, anstatt box/lines, oder Leute?
Oder du prüfst einfach alle Wände ab, ob sie mit spieler kollidieren WERDEN, wenn er sich bewegt, und verhindest es, wenn ja.
Code: Alles auswählen
KugelneuX = KugelX + KugelBEwegX
if keyboard (up)
if kugelneuX +Kugelneubreite > würfelX and kugelneuX < WürfelX + Würfelbreite
; Kollision auf X-ebene.. das gleiche halt noch mit Y.
endif
endif

(auch, wenn ich ungern an Wänden hängenbleibe...)
ps: die roten quoffels: unbegehbar,
die grünen= begehbar... nur mal als Beispiel.
Ist aber nur ein Vorschlag. man kanns auch komplizierter lösen,
indem man schaut, ob alle DIREKT um den spieler liegenden würfel denn mit ihm kollidieren.. dafür braucht man dann auch raster, bei großen karten..
aber egal.. k.a.
Rasterbeispiel:
Code: Alles auswählen
; -------------------------------------------------------------------------------------------------------------
; demo raster -> Basiswissen..
; -------------------------------------------------------------------------------------------------------------
; -------------------------------------------------------------------------------------------------------------
; enumerations
; -------------------------------------------------------------------------------------------------------------
Enumeration ; sprites
#sprite_back
#sprite_wand
EndEnumeration
#rasterbreite = 15
#spielfeld_rasterbreite = 100 ; wie viele Felder nach rechts das spielfeld haben soll
#spielfeld_rasterhohe = 100 ; wie viele Felder nach unten
; -------------------------------------------------------------------------------------------------------------
; structures
; -------------------------------------------------------------------------------------------------------------
Structure boden
grafik.i
Iswand.i
EndStructure
; -------------------------------------------------------------------------------------------------------------
; globals
; -------------------------------------------------------------------------------------------------------------
Global Dim boden. boden (#spielfeld_rasterbreite,#spielfeld_rasterhohe ) ; das Spielfeld
; -------------------------------------------------------------------------------------------------------------
; Init Stuff
; -------------------------------------------------------------------------------------------------------------
InitSprite ()
InitKeyboard ()
OpenScreen ( 1024 , 768 ,32 , "test max_aigner@gemusoft )")
; -------------------------------------------------------------------------------------------------------------
; sprites erstellen
; -------------------------------------------------------------------------------------------------------------
TransparentSpriteColor ( -1 , 0 )
CreateSprite ( #sprite_back,#rasterbreite,#rasterbreite) ; sprite erstellen...
If StartDrawing ( SpriteOutput( #sprite_back )) ; drauf zeichnen
Box ( 0 , 0 , #rasterbreite , #rasterbreite , RGB( 0,222,22)) ; grün für brav=begehbar
StopDrawing () ; fertich
EndIf
CreateSprite ( #sprite_wand,#rasterbreite,#rasterbreite)
If StartDrawing ( SpriteOutput( #sprite_wand ))
Box ( 0 , 0 , #rasterbreite , #rasterbreite , RGB( 222,0,0)) ; rot für mauer = böse.
StopDrawing ( )
EndIf
; -------------------------------------------------------------------------------------------------------------
; boden erstellen
; -------------------------------------------------------------------------------------------------------------
For x = 0 To 60
For y = 0 To 50
If Random(30) = 0 ; jede 3. platte wird ungegehbar.
breiteweite = Random(20) ; maximal die 20 folgenden Rasterteie nach rechts sollen auch wände werden können
For z = 1 To breiteweite ; wir wollen ja breite wände haben -> die Wand- nachbarn auch zur Mauer machen.
If x+z <= #spielfeld_rasterbreite ; wenn die wandteile im Spielfeld sind
boden( x+z , y ) \ grafik = #sprite_wand ; das bild ist die Wand.
boden( x+z , y ) \ Iswand = 1 ; sie wird unbegehbar.
EndIf
Next
Else
If boden(x , y ) \grafik < 1 ; also, wenn es noch nichts ist, auch keine Mauer -> boden erstellen
boden( x , y ) \ grafik = #sprite_back ; das bild ist der Hintergrund
boden( x , y ) \ Iswand = 0 ; sie wird begehbar, standardmäßig sowieso 0, aber der Sauberkeit halber setzen wirs hier auch =0.
EndIf
EndIf
Next
Next
; -------------------------------------------------------------------------------------------------------------
; repeat: Anzeigen
; -------------------------------------------------------------------------------------------------------------
Repeat
ExamineKeyboard ()
FlipBuffers ()
ClearScreen (0)
; boden anzeigen
For x = 0 To 60
For y = 0 To 50
If IsSprite ( boden(x,y)\grafik ) ; also, wenn eine grafik geladen wurde -> die bodenplatte also existiert (man kann auch einfach ein "exist" für jede bodenplatte machen.. hier egal.
DisplayTransparentSprite( boden(x,y)\grafik , x *#rasterbreite, y * #rasterbreite)
EndIf
Next
Next
Until KeyboardReleased ( #PB_Key_Escape )