Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Gráficos (https://www.clubdelphi.com/foros/forumdisplay.php?f=8)
-   -   Problema de incompatibilidad de tipos (https://www.clubdelphi.com/foros/showthread.php?t=40750)

kakarotv5 26-02-2007 02:50:05

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.


La franja horaria es GMT +2. Ahora son las 17:24:04.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi