#1 19.04.2011 20:13:24

Gnietschow
ProMember
Ort: Berlin
Registriert: 20.06.2007
Beiträge: 237

Avoider

Hi Delphidevler smile

Ich bastel immer mal zwischendurch an meinem kleinen Spiel Avoider. Man bewegt ein Raumschiff hin und her und versucht Hindernissen auszuweichen. Je länger man überlebt desto mehr Punkte gibt es.


Das Spiel ist zwar noch in einem seehr frühem Stadium, aber antesten kann man es schon.

Ich hab bisher 1842 Punkte erreicht wink


Downloaden könnt ihr es über die http://www.pixelsummoners.de/index.php? … ;Itemid=65


Feedback und Ideen sind immer erwünscht cool

MfGnietschow

Beitrag geändert von Gnietschow (19.04.2011 20:14:56)


Attachments:
Attachment Icon Screeni1.jpg, Größe: 319,108 bytes, Downloads: 510
Attachment Icon Screeni2.jpg, Größe: 324,755 bytes, Downloads: 493
Attachment Icon Screeni3.jpg, Größe: 326,808 bytes, Downloads: 458

Es gibt 10 Gruppen von Menschen - die die das Binärsystem verstehen und die anderen.  :-)
Vegetarier essen meinem Essen das Essen weg ;)
-------------------------------------------------------------------------------------------------------------------
Der Community-Hub für Videospiele: gameloop.io

Offline

 

#2 24.04.2011 10:52:50

TonyMontana
Member
Registriert: 19.12.2007
Beiträge: 74

Re: Avoider

Ich habe es mal kurz angetestet, spielt sich schon recht gut :-)
Man könnte die Steuerung noch etwas ändern, so, dass sie etwas verzögert reagiert vielleicht. Oder eine Reaktion der Steuerung ähnlich der Mauszeiger Beschleunigung von Windows, da reagiert die Maus zuerst ein bisschen weniger. Da gibt es natürlich viele Möglichkeiten... Nur mal so eine Idee :-)
Mich würde noch interessieren, wie das Spiel intern funktioniert, vielleicht möchtest du dazu etwas verraten? Definierst du bestimmte Kontrollpunkte und dazu dann Splines, die die Berechnung der Flugbahn ermöglichen? Und wie "baust" du die jeweils sichtbare Strecke zusammen? Sind das vorgefertigte Meshs?

Beitrag geändert von TonyMontana (25.04.2011 10:11:27)

Offline

 

#3 25.04.2011 18:45:56

Gnietschow
ProMember
Ort: Berlin
Registriert: 20.06.2007
Beiträge: 237

Re: Avoider

Fein, bastel gerade an einem kleinen Update, dass man kurzzeitig die Zeit langsamer drehen kann um schwierige Passagen besser zu überstehen smile
Ich denke mal eine Verzögerung dürfte bei so einem Spiel recht schnell zu Frust führen, da es ja auf schnelle Reaktionen ankommt. Aber über so eine Mauszeigerbeschleunigung muss ich mal überlegen.
Mit den Splines hast du schon gut getroffen, ich nehme immer in festen Abständen Knoten und verbinde sie mittels einer Hermite-Spline, wobei die Tangenten leicht zufällig sind, aber innerhalb der Knoten gleich, damit es keine Knicke gibt.
Die Streckenteile sind dementsprechend nicht vordefiniert, sondern werden zur Laufzeit berechnet, wozu ich die Strecke quasi zu einem Zylinder aufblase verbinde und die ganzen Sachen, wie Normalen und Tangenten berechne.


Es gibt 10 Gruppen von Menschen - die die das Binärsystem verstehen und die anderen.  :-)
Vegetarier essen meinem Essen das Essen weg ;)
-------------------------------------------------------------------------------------------------------------------
Der Community-Hub für Videospiele: gameloop.io

Offline

 

#4 25.04.2011 19:30:56

TonyMontana
Member
Registriert: 19.12.2007
Beiträge: 74

Re: Avoider

Aha ok, danke für deine Antwort. Noch eine andere Idee wäre, sowas wie ein Kraftfeld einzubauen für bestimmte Streckenabschnitte, wo man dann eben gegensteuern muss. Damit der Spieler dieses auch vorher erkennt, könnte man dann die Texturen etwas verändern oder einen Signalton abspielen.
Splines sind schon eine sehr nützliche Sache. Damit will ich vielleicht bei Gelegenheit auch noch mal etwas experimentieren (und zwar im Geometry Programm, da benutze ich zur Zeit ja einfach nur eine lineare Interpolation zwischen den paarweise zusammengehörigen Vertices. Ansonsten habe ich mir noch eine Kamera gebastelt, die dann auf gleiche Art und Weise (linear) durch ihre vorher festgelegten Kontrollpunkte fliegt. Natürlich wäre hier ein Spline die bessere alternative, da dann die Kamera an den Kontrollpunkten nicht so "ruckelt").
Zuerst jedoch muss ich mir dann noch mal ansehen, wie das mathematisch funktioniert, da haperts noch etwas :-)

Beitrag geändert von TonyMontana (26.04.2011 11:19:09)

Offline

 

#5 26.04.2011 11:23:54

TonyMontana
Member
Registriert: 19.12.2007
Beiträge: 74

Re: Avoider

Die Interpolation funktioniert bei mir anscheinend. Allerdings habe ich das Problem, dass ich bei der Verwendung von normierten Tangenten eine beschleunigte Bewegung habe. Als Parameter habe ich die Zeit genommen, die seit dem letzten Frame vergangen ist.

Offline

 

#6 26.04.2011 14:44:17

Gnietschow
ProMember
Ort: Berlin
Registriert: 20.06.2007
Beiträge: 237

Re: Avoider

Das war bei mir auch, weshalb ich die Spline mit n gleichlangen Geraden angenähert hab und die Interpolation über diesen Polygonzug mache smile


Es gibt 10 Gruppen von Menschen - die die das Binärsystem verstehen und die anderen.  :-)
Vegetarier essen meinem Essen das Essen weg ;)
-------------------------------------------------------------------------------------------------------------------
Der Community-Hub für Videospiele: gameloop.io

Offline

 

#7 28.04.2011 10:35:38

TonyMontana
Member
Registriert: 19.12.2007
Beiträge: 74

Re: Avoider

Wie berechnest du die Geraden? Man kann ja den Parameter verwenden um Punkte auf dem Spline zu finden aber dann werden die Geraden nicht gleichlang?

Offline

 

#8 28.04.2011 11:29:20

Gnietschow
ProMember
Ort: Berlin
Registriert: 20.06.2007
Beiträge: 237

Re: Avoider

Ups meinte das anders, ich unterteile die Spline in n Geraden (nicht gleichlange). Nun kann ich die Länge der Spline näherungsweise bestimmen indem ich die Stückenlänge aufaddiere. Um nun beispielsweise 25% der Strecke linear zurückzulegen, nehme ich ein Viertel der Gesamtstrecke und laufe diesen auf den linearen Stücken ab, indem ich immer wieder die Stücklänge von der noch zu laufenden Strecke abziehe, bis die Strecke nicht mehr reicht um das Teilstück komplett abzulaufen. Der Rest kann dann direkt auf der Strecke gelaufen werden.
Hier mal mein Codeschnipsel dafür, vielleicht sagt der mehr:

Code:

// s ist eine prozentuale Angabe zwischen 0 und 1; Samplingrate bestimmt die Genauigkeit, je höher desto genauer aber auch Rechenaufwändiger
function RHermiteStrecke.getLinearePosition(s : single; Samplingrate : integer) : TD3DXVector3;
var
  ZurückzulegendeStrecke, momStrecke : single;
  i : integer;
  temp, lasttemp : TD3DXVector3;
begin
  Samplingrate := Samplingrate - 1;
  i := 0;
  s := Min(Max(s, 0), 1);
  momStrecke := 0;
  ZurückzulegendeStrecke := self.Länge(Samplingrate) * s;
  while (true) do
  begin
    temp := getPosition(i / Samplingrate);
    if i <> 0 then momStrecke := momStrecke + D3DXVec3Length(VektorSub(lasttemp, temp));
    if momStrecke > ZurückzulegendeStrecke then
    begin
      D3DXVec3Lerp(Result, lasttemp, temp, (1 - (momStrecke - ZurückzulegendeStrecke) / D3DXVec3Length(VektorSub(lasttemp, temp))));
      exit;
    end;
    lasttemp := temp;
    inc(i);
  end;
end;

Es gibt 10 Gruppen von Menschen - die die das Binärsystem verstehen und die anderen.  :-)
Vegetarier essen meinem Essen das Essen weg ;)
-------------------------------------------------------------------------------------------------------------------
Der Community-Hub für Videospiele: gameloop.io

Offline

 

#9 28.04.2011 21:32:41

TonyMontana
Member
Registriert: 19.12.2007
Beiträge: 74

Re: Avoider

Den Quelltext habe ich mir jetzt nicht näher angesehen, deine Beschreibung war gut nachzuvollziehen. Ich habe das auch schon so, oder so ähnlich probiert. Muss das aber nochmal verbessern bei Gelegenheit, da das resultat so aussah, dass die berechnete Position manchmal zurück springt (sind wahrscheinlich Rundungsfehler). Gibt es eigentlich andere Spline Typen, bei denen man dann, auf welche Art und Weise auch immer, an die eigentlich benötigte Funktion herankommen kann, die einem zu einer gegebenen Länge dann den entsprechenden Parameter liefert? Der Vorteil von hermiten Splines ist auf jeden Fall, dass auch tatsächlich alle Kontrollpunkte durchlaufen werden. Das ist ja bei den Bezier-Kurven nicht der Fall, da dort meines Wissens nach nur Anfangs- und Endpunkt durchlaufen werden.
Interessant finde ich aber, dass man bei bestimmten Anordnungen der Punkte und der Verwendung von langen Tangenten (nicht normiert, sondern z.B. 25 Längeneinheiten) eine sehr gleichmäßige Parametrisierung hinbekommen kann. Bei mir habe ich die Punkte dazu in einem Kreis um den Ursprung angeordnet und als Tangenten dann die Tangenten des Kreises genommen, auf dem die Punkte liegen. Dadurch wird die Bewegung sehr gleichmäßig. Die von dir verwendete Methode, die Länge des Splines durch Geraden abzuschätzen, ist auf jeden Fall die Methode der ersten Wahl, wenn man flexibel bleiben möchte, was die Lage der Kontrollpunkte betrifft.

Beitrag geändert von TonyMontana (28.04.2011 21:41:08)

Offline

 

Brett Fußzeile

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson