[ascoders] Re: Math: Objekt durchfährt 2 Punkte in 2d

  • From: André Michelle <am@xxxxxxxxxxxxxxxxxx>
  • To: <ascoders@xxxxxxxxxxxxx>
  • Date: Thu, 6 Nov 2003 12:23:22 +0100

Florian Krüsch wrote:
>> Wir haben das in 8 Tagen aus den Boden gestampft.
>> Die Cue Überprüfung läuft mit der sin,cos Drehung. Scheint auch ganz
>> performant zu sein...
>>
> kannst du den entsprechenden Code mal posten?

gerne, denk nur dran, dass in 8 Tagen viel geschmiert wird :o)


<>
Cues = [
 { r : { x: 996.95,y:-275.95 }, c : { x: 915.95,y:-140.95 }, l : { x:
926.95,y:70 }},
 { r : { x: 490.95,y:-574.95 }, c : { x: 395,y:-419.95 }, l : { x:
449,y:-261.95 }},
 { r : { x: 6,y:-621.95 }, c : { x: -52,y:-451.95 }, l : { x: 6,y:-307 }},
[....] //-- r/l - rechter, linker Beschränkungspunkt : c - anzufahrender Cue
Point

Anfragen nach Cue und Check passed:
  //-- get cue
  var cue = this.cue;
  //-- get local
  var r,c,l,cx,cy,lx,ly,dx,dy,p_angle,_sin,_cos,prx,pry;
  r = cue.r; c = cue.c; l = cue.l;
  cx = c.x; cy = c.y;
  lx = l.x; ly = l.y;
  p_angle = cue.p_angle;
  dx = px - lx; dy = py - ly;
  //-- get precalc sin,cos
  _sin = cue._sin; _cos = cue._cos;
  prx = dy * _sin + dx * _cos + lx;
  pry = dy * _cos - dx * _sin + ly;
  //-- cue passed ?
  if ( pry < cue.rry && prx > lx && prx < cue.rrx ) {
  this.cue = cues[ ++aObj.cueIndex ];
   if ( aObj.cueIndex == cues.length && !aObj.user ) {
    RenderManager.removeListener ( aObj.control );
    aObj.control = new MovingControls ( aObj ).applyRaceEndFlight ();
    RenderManager.addListener ( aObj.control );
   };
  };

ich drehe den rechten um den linken Punkt um den Winkel "RL". Das und den
sin/cos wird zu Begin des Spiels einmal vorberechnet.

An schönsten finde ich die Überholfunktion mit einer (!) Variable:

  if ( Player.cueIndex < aObj.cueIndex ) {
   //-- is in front of Player
   var maxTurn = .075;
   var maxVel  =  13;
   var accVel  = .1;
   var accVelAngle = .01;
   this.isBack = false;
  } else if ( Player.cueIndex - 1 > aObj.cueIndex || this.isBack ) {
   // back and overcome
   var maxTurn = .2;
   var maxVel  = 24;
   var accVel  = .5;
   var accVelAngle = .035;
   this.isBack = true;
  } else {
   var maxTurn = .1;
   var maxVel  = 17;
   var accVel  = .2;
   var accVelAngle = .01;
  };

Mehr dazu auf den shockwards :o)


gruss

aM
http://www.andre-michelle.com
http://public.extrajetzt.de

------------------------------------------------------
Archiv   : //www.freelists.org/archives/ascoders/
Optionen : //www.freelists.org/list/ascoders
------------------------------------------------------

Other related posts: