AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Zufällige Bewegung eines Sprites
Thema durchsuchen
Ansicht
Themen-Optionen

Zufällige Bewegung eines Sprites

Ein Thema von Luckie · begonnen am 31. Dez 2003 · letzter Beitrag vom 31. Dez 2003
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#1

Zufällige Bewegung eines Sprites

  Alt 31. Dez 2003, 12:16
Delphi-Quellcode:
procedure TEnemy.DoMove(MoveCount: Integer);
var
  Direction: Cardinal; // 0: left 1: right;
begin
  inherited DoMove(MoveCount);
  Direction := Random(5);
  if (Direction mod 2 = 0) then
    X := X - 10
  else
    X := X + 7;
  Y := Y + 5;

  if (Y = Form1.DXDraw1.Height) or ((X < 0) or (X > Form1.DXDraw1.Width)) then
    Dead;
end;
Das ist meine Routine, um einen Sprit zufällig von oben nach unten zu bewegen. Allerdings zappelt der eigentlich mehr hin und her. Wie bekomme ich es jetzt hin, dass er "fließend" bewegt. Also auch mal ein paar mehr Eimheitem nach links und rechts macht?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.723 Beiträge
 
Delphi XE Professional
 
#2

Re: Zufällige Bewegung eines Sprites

  Alt 31. Dez 2003, 12:21
Hi!

Kann es sein, dass diese Funktion zu oft aufgerufen wird, er also alle zehntel-Sekunde oder so ne neue Position erhält und deswegen so zappelt?
Das könnte man über ein Flag lösen!

Ciao fkerber
Frederic Kerber
  Mit Zitat antworten Zitat
Dagon

Registriert seit: 13. Jul 2003
505 Beiträge
 
Delphi 7 Professional
 
#3

Re: Zufällige Bewegung eines Sprites

  Alt 31. Dez 2003, 12:22
Damit er ein paar Einheiten mehr nach links/rechts geht, musst du für das rot Markierte Zufallswerte erzeugen lassen:

if (Direction mod 2 = 0) then
X := X - 10
else
X := X + 7;
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Zufällige Bewegung eines Sprites

  Alt 31. Dez 2003, 12:43
@fkerber: Das kann sein.

@bthe_master: das wollte ich eigetnlich nicht, denn dann springt er ja noch mehr wenn er in einem Intervall nach unten geht nach links und rechts.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Dagon

Registriert seit: 13. Jul 2003
505 Beiträge
 
Delphi 7 Professional
 
#5

Re: Zufällige Bewegung eines Sprites

  Alt 31. Dez 2003, 12:48
Ach so, jetzt verstehe ich erst, was du genau wissen wolltest
  Mit Zitat antworten Zitat
moritz

Registriert seit: 18. Apr 2003
1.037 Beiträge
 
#6

Re: Zufällige Bewegung eines Sprites

  Alt 31. Dez 2003, 12:51
Hallo

Im Prinzip nicht schwer. Du fängst so an:

X & Y sind Gleitkommazahlen.
Delphi-Quellcode:
Randomize;
X:=Random(10)+10;
Y:=Random(10)+10;
Und dann bei jedem Timer-Aufruf:
Delphi-Quellcode:
X:=X-((Random(40)/10)-2);
Y:=Y-((Random(40)/10)-2);
Sollte eigentlich gehen. (Habs aber nicht getestet)

Gruß

Onz
"Optimistisch ist diejenige Weltanschauung, die das Sein höher als das Nichts stellt und so die Welt und das Leben als etwas an sich Wertvolles bejaht."
Albert Schweitzer
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Zufällige Bewegung eines Sprites

  Alt 31. Dez 2003, 13:21
Jetzt bewegen sie sich konsequent nur nach rechts.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
OregonGhost

Registriert seit: 8. Jun 2002
Ort: Lübeck
1.216 Beiträge
 
Delphi 3 Professional
 
#8

Re: Zufällige Bewegung eines Sprites

  Alt 31. Dez 2003, 13:41
Das Problem ist, dass du letztendlich deinem Sprite immer nur eine neue Position gibst. Du musst deinem Sprite eine Geschwindigkeit zuweisen, und die musst du dann zufällig verändern. Dadurch wird sich die Position nicht so zappelnd, sondern etwas gleichmäßiger ändern. Zusätzlich könntest du auch noch eine Beschleunigung hinzufügen und nur die zufällig ändern, könnte noch etwas "realistischer" werden.
Oh, ich überlas noch, dass sich das Sprite von oben nach unten bewegen soll. Auch das kein Problem, denn die Y-Komponente der Geschwindigkeit muss halt immer positiv sein. Die X-Komponente kann sich ja weiterhin so verändern wie oben beschrieben.

Soll das sowas wie ein Schneeflöckchen werden?
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#9

Re: Zufällige Bewegung eines Sprites

  Alt 31. Dez 2003, 13:42
Klingt gut. Nur fange ichgerade erst mit DX an und kann mit "Beschleunigung mitgeben" und "Geschwindigkeit mitgeben" nicht allzuviel anfangen im Moment.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
OregonGhost

Registriert seit: 8. Jun 2002
Ort: Lübeck
1.216 Beiträge
 
Delphi 3 Professional
 
#10

Re: Zufällige Bewegung eines Sprites

  Alt 31. Dez 2003, 13:51
Das lustige an dieser Physik ist, dass sie sehr einfach umzusetzen ist und im Übrigen nichts mit DX zu tun hat ;C)
Geschwindigkeit vx und vy musst du zufällig verändern. Dabei achtest du darauf, dass vy immer größer als 0 bleibt. Das Sprite bewegst du jetzt, indem du
X um vx erhöhst und
Y um vy erhöhst.
Jedenfalls prinzipiell geht das so. Deine Zufallsberechnung sollte also zum Beispiel
Code:
vx := vx + Random(40/10)-2
vy := vy + Random(30/10)-1
lauten. Damit würde vy mit hoher Wahrscheinlich eher über 0 bleiben, während vx sich gleichmäßig nach links und rechts verändert.

Nachtrag: Die Beschleunigung funktioniert genauso. Du hast also ax und ay, und erhöhst vx und vy jeweils um diese.
Du musst die Zufallsroutine natürlich noch etwas tunen, zum Beispiel zufällige Grundgeschwindigkeit mitgeben und die Änderungen kleiner ausfallen lassen als diese etc.
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:38 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz