Suche Tutorial wie man Schrägen hochläuft

Anfängerfragen zum Programmieren mit PureBasic.
andre x
Beiträge: 3
Registriert: 13.07.2005 19:20

Suche Tutorial wie man Schrägen hochläuft

Beitrag von andre x »

Hallo

Ich habe neulich mal ein englisches Tut gesehen wie man Sprites dazu bringt Schrägen, bzw. Hügel hochzulaufen. Gefunden hab ich den Link in diesem Forum (oder war's im Dark- oder Blitz Basic Forum - ich habs vergessen) :oops:
Hab mir schon Blasen an den Fingern gesucht. :freak:
Weis vielleicht jemand welches Tutorial ich meine und vor allen, wie der s****ß link ist??

THX
Benutzeravatar
benpicco
Beiträge: 391
Registriert: 01.10.2004 15:32
Wohnort: im Code
Kontaktdaten:

Beitrag von benpicco »

Wie schräg?
Meinst du sowas?

Code: Alles auswählen

InitSprite()
InitKeyboard()
OpenScreen(1024,768,16,"schräg")
CreateSprite(1,10,10)
StartDrawing(SpriteOutput(1))
Box(0,0,10,10,RGB(0,0,255))
StopDrawing()
x=1
y=1
Repeat
  ClearScreen(10,10,10)
  DisplaySprite(1,x,y)
  x+1
  y+1
  FlipBuffers()
  ExamineKeyboard()
Until y>768 Or KeyboardPushed(#PB_Key_Escape)
End
  
Schon auf der Robsite geschaut?
Johann Wolfgang von Geothe hat geschrieben:Wie dieses oder jenes Wort geschrieben wird, darauf kommt es doch eigentlich nicht an, sondern darauf, daß die Leser verstehen, was man damit sagen wollte.
Benutzeravatar
Green Snake
Beiträge: 1394
Registriert: 22.02.2005 19:08

Beitrag von Green Snake »

ich denke er meint was anderes.
er will glaube ich, dass die sprites gezommt werden, so dass es aus sieht, als ob das sprite über einen hügel läuft...is schwer zu erklären, aber auf der ex purebasic lounge gabs mal ein thema dazu :allright:
-.-"
andre x
Beiträge: 3
Registriert: 13.07.2005 19:20

.

Beitrag von andre x »

Hi

:D Ist ja n schnelle Antwort

Also ich meine das so:
Bild


In dem erwähnten Tut ging es nicht um PureBasic Code, sondern mehr theoretisch wie sich die Sprites auf den Tiles verhalten.
Benutzeravatar
benpicco
Beiträge: 391
Registriert: 01.10.2004 15:32
Wohnort: im Code
Kontaktdaten:

Beitrag von benpicco »

Ah, dass müsste mit SpritePixelcollision gehen, und ausweichen in die Richtung, in der keine collision ist (nach oben oder unten bei konstanter Vorwärtsbewegung)
Johann Wolfgang von Geothe hat geschrieben:Wie dieses oder jenes Wort geschrieben wird, darauf kommt es doch eigentlich nicht an, sondern darauf, daß die Leser verstehen, was man damit sagen wollte.
Benutzeravatar
Ynnus
Beiträge: 855
Registriert: 29.08.2004 01:37
Kontaktdaten:

Beitrag von Ynnus »

Ich versuche das mal zu beschreiben, wie ich es machen würde:
Lass die Spielfigur immer auf den Höchsten Punkt des Bodens anzeigen. Wenn die Höhe des Bodens sich ändert, etwa wegen einem Hügel, dann lass das Sprite auch "mitwachsen" und am höchsten Punkt anzeigen. Damit kann die Figur dann auch Berge erklimmen.
Bei senkrechten oder nahezu senkrechten Mauern musst du allerdings schauen, dass du da nicht auch hochlaufen kannst. Also musst du die Position vorher und nach der Bewegung vergleichen, ob sie großer eine gewisse Anzhal Pixel ist. Wenn der Höhenunterschied zu groß ist, weil eine Mauer oder Wand kommt und der Spieler plötzlich einen riesigen Sprung machen würde, lass die Figur wieder auf die ursprüngliche Position zurückkehren, vor der Bewegung, was ein Stop der Spielfigur bedeutet. (Die Figur bleibt dann vor der Mauer stehen).
Ist der Abstand in kleinem Ausmaß, lass die Figur dort stehen. Das bewirkt ein Hochlaufen an einer Schrägseite.
(Dies geschieht alles innerhalb der Schleife VOR dem Anzeigen der geänderten Position, dadurch sieht man garnicht, dass der Spieler kurzzeitig auf der Wand war und wieder zurückgesetzt wurde).
Benutzeravatar
benpicco
Beiträge: 391
Registriert: 01.10.2004 15:32
Wohnort: im Code
Kontaktdaten:

Beitrag von benpicco »

Wäre soetwas nicht auch eine Lösungsmöglichkeit, oder ist das zu langsam?

Code: Alles auswählen

InitSprite()
InitKeyboard()
Global playerX.f
Global playery.f
#g=9.84
height=3
playerX=500
OpenScreen(1024,768,16,"schräg")
CreateSprite(1,10,10)
StartDrawing(SpriteOutput(1))
Box(0,0,10,10,RGB(0,0,255))
StopDrawing()
CreateSprite(0,1024,768)
StartDrawing(SpriteOutput(0))
LineXY(100,768,1024,0,RGB(255,0,0))
DrawingMode(4)
Box(600,200,100,300,RGB(255,0,0))
FillArea(200,700,RGB(255,0,0),RGB(0,255,0))
StopDrawing()
Repeat
  ClearScreen(10,10,10)
  DisplayTransparentSprite(0,0,0)
  DisplaySprite(1,playerX,playery)
  FlipBuffers()
  ExamineKeyboard()
  If SpritePixelCollision(1,playerX,playery+speedy,0,0,0)=0
    speedy=#g/2*Pow(t,2)
    playery+speedy
    t+1
  Else
    t=0
    speedy=2
  EndIf
  If SpritePixelCollision(1,playerX,playery,0,0,0)
    Repeat
      playery-1
    Until SpritePixelCollision(1,playerX,playery,0,0,0)=0
    speedy=2
  EndIf
  MoveX=0
  If KeyboardPushed(#PB_Key_Right)
    MoveX+1
  ElseIf KeyboardPushed(#PB_Key_Left)
    MoveX-1
  EndIf
  If SpritePixelCollision(1,playerX+MoveX,playery-height,0,0,0)=0
  playerX+MoveX
  EndIf
Until KeyboardPushed(#PB_Key_Escape)
End
Johann Wolfgang von Geothe hat geschrieben:Wie dieses oder jenes Wort geschrieben wird, darauf kommt es doch eigentlich nicht an, sondern darauf, daß die Leser verstehen, was man damit sagen wollte.
Benutzeravatar
Batze
Beiträge: 1492
Registriert: 03.06.2005 21:58
Wohnort: Berlin
Kontaktdaten:

Beitrag von Batze »

Mir wärs zu langsam!
Aber was besseres fällt mir jetzt auch nicht ein.
Hier sind meine Codes (aber die Seite geht gerade nicht):
http://www.basicpure.de.vu
andre x
Beiträge: 3
Registriert: 13.07.2005 19:20

.

Beitrag von andre x »

Antworten