Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Azasel

unregistriert

1

16.10.2017, 23:36

Ein Ereignis um die gewünschte Zeit verzögern

Guten Abend,
Ich bin gerade dabei ein Spiel mit TIC-80 zu entwickeln.
Als Programmiersprache nutze ich aber nicht LUA, sondern Javascript.

Nun ist es so, dass TIC-80 keine delay() Funktion zur Verfügung stellt, steht zumindest nicht in der API.
Die sogenannte TIC() Funktion in der der ganze Code ausgeführt wird, läuft mit 60FPS.

Jetzt zum Problem:
Z.B. möchte Ich meinem Spieler jede 200 Millisekunden die Möglichkeit geben, sich beim Knopfdruck um 1 Feld in eine beliebige Richtung zu bewegen.
Damit meine ich, der Spieler soll sich nicht nach einem kurzem Knopfdruck 1.000 Felder in eine Richtung bewegen, sondern nur 1 mal, bzw. jede gedrückte Sekunde um 5 Felder(1000ms/200ms).
Das selbe gilt dann auch für andere lebendige Objekte.

Ich bin total die Niete in Mathe und wenn ich noch 10 Minuten länger darüber nachdenke, wie ich das Problem Mathematisch in den Griff bekomme, muss ich dieses großartige Spiel, an dem ich schon ca. 6-7 Stunden verbracht habe, verwerfen.
Danke schonmal :S

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

2

17.10.2017, 00:32

Ich bin total die Niete in Mathe und wenn ich noch 10 Minuten länger darüber nachdenke, wie ich das Problem Mathematisch in den Griff bekomme, muss ich dieses großartige Spiel, an dem ich schon ca. 6-7 Stunden verbracht habe, verwerfen.

Du darfst nicht so schnell aufgeben.

Du kannst dir so einen Delay doch selbst basteln. Wenn du deinen Updatezyklus mit konstanten 60 Frames pro Sekunde ausführst dann kannst du doch die Frames hochzählen und ab einem gewissen Schwellwert die Bewegung ausführen.

Quellcode

1
2
3
4
5
6
7
update() {
  currentFrame++
  if currentFrame >= threshold {
    currentFrame = 0
    makeMove()
  }
}

Den Pseudocode musst du natürlich an deine Bedürfnisse anpassen. Du kannst den Counter beispielsweise nur dann hochzählen solange eine Taste gedrückt wird. Sobald die Taste los gelassen wird setzt du den Counter auf 0. Spiel mit dem Code einfach mal ein wenig rum. Das kannst du bestimmt schnell an dein Problem anpassen.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“