Ver Mensaje Individual
  #1  
Antiguo 26-02-2007
kakarotv5 kakarotv5 is offline
Miembro
 
Registrado: feb 2007
Posts: 162
Reputación: 18
kakarotv5 Va por buen camino
Problema de incompatibilidad de tipos

Me estoy volviendo loco, no se por qué me da error, os cuento.

Estoy intentando hacer una explosión, hasta aquí todo bien, el problema viene cuando me meto a tocar código, mirad:

Código Delphi [-]
GLfireFXManager1.RingExplosion(8,10,5,XVector,YVector);

donde XVector e YVector son de tipo TAffineFltVector.

Intento compilar y me da el siguiente error:

[Error] Unit1.pas(46): Incompatible types: 'TVector3f' and 'TAffineFltVector'

Me voy a ver como está hecha la función RingExplosion con Crt + Botón izquierdo del ratón y está así:

Código Delphi [-]
// RingExplosion
//
procedure TGLFireFXManager.RingExplosion(minInitialSpeed, maxInitialSpeed, lifeBoostFactor : Single;
                                         const ringVectorX, ringVectorY : TAffineVector;
                                         nbParticles : Integer = -1);
var
   n : Integer;
   tmp, refPos : TVector;
   fx, fy, d : Single;
begin
   if nbParticles<0 then n:=MaxInt else n:=nbParticles;
   if Assigned(Reference) then
      refPos:=Reference.AbsolutePosition
   else refPos:=NullHmgPoint;
   while (NPand (n>0) do begin
      // okay, ain't exactly and "isotropic" ring...
      fx:=Random-0.5;
      fy:=Random-0.5;
      d:=RSqrt(Sqr(fx)+Sqr(fy));
      PAffineVector(@tmp)^:=VectorCombine(ringVectorX, ringVectorY, fx*d, fy*d);
      tmp[3]:=1;
      ScaleVector(tmp, minInitialSpeed+Random*(maxInitialSpeed-minInitialSpeed));
      with FFireParticles[NP] do begin
         Position:=VectorAdd(refPos, VectorMake((2*Random-1)*FireRadius, (2*Random-1)*FireRadius, (2*Random-1)*FireRadius));
         Speed:=tmp;
         TimeToLive:=ParticleLife*(Random*0.5+0.5)*lifeBoostFactor;
         LifeLength:=TimeToLive;
         Alpha:=FireDensity;
      end;
      Inc(NP);
      Dec(n);
   end;
end;

El caso es que no se por qué me da el error, se supone que no debería de dar error ya que si me voy a mi unidad Geometry.pas Version 2.6 tengo que:
Código Delphi [-]
TAffineVector = TAffineFltVector;
y
Código Delphi [-]
TVector3f = TAffineFltVector;

Además he mirado por internet y todos usan la función RingExplosion de esa forma pero a ellos se ve que no les da error. ¿Alguna idea?. Me estoy desquiciando. Gracias.

EDITO: Me he bajado una demo que hace uso de la función, mañana lo miro y os cuento. Saludos.

EDITO2: Lo he mirado por encima y creo que el fallo está en usar la unit Geometry.pas en vez de la unit VectorGeometry.pas. Saludos.

EDITO3: En efecto ese era el problema, ya tengo la aplicación montada, además si usais un archivo con extensión 3ds os debeis de asegurar de poner la unidad GLFile3DS en la claúsula uses de vuestro programa.

Última edición por kakarotv5 fecha: 29-04-2007 a las 18:18:40.
Responder Con Cita