2014-04-29 6 views
0

나는 내가 델파이에 대한 엠바 카데로 XE6에 효과를 설립 한카드 플립 애니메이션

개발할 FireMonkey 모바일 아이폰에 대한 응용 프로그램 및 안드로이드 엠바 카데로 XE6를 사용하여 플립 애니메이션 효과 실현하려는 :

Playing card flip animation

소스 코드를 Delphi에서 FireMonkey Mobile로 변환 할 수 있습니까?

+0

아마 TAnimation의 자손과 함께 할 수 있습니다. – Peter

답변

0

이 코드 조각이 당신에게 Firemonkey를 사용하여 3D-cardflip위한 시발점을 제공 할 수 있습니다.

procedure TFormMain.Flip(aTabControl: TTabControl; aFront, aBack: TTabItem; aBkColor: TAlphaColor; aDirection: TFlipDirection) ; 
var 
    Viewport: TViewport3D; 
    R: TRectangle3D; 
    bmpFront: TBitmap; 
    bmpBack: TBitmap; 
    matFront: TTextureMaterialSource; 
    matBack: TTextureMaterialSource; 
    Depth: extended; 
    Angle: extended; 
begin 
    // Create a viewport and let it overlap aControl 
    Viewport := TViewport3D.Create(nil); 
    Viewport.BoundsRect := aTabControl.BoundsRect; 
    Viewport.Position.X := aTabControl.Position.X; 
    Viewport.Position.Y := aTabControl.Position.Y; 
    Viewport.Color := aBkColor; 
    Viewport.Parent := Self; 

    // Create a flat 3d-rectangle and let it fully contain the Viewport 
    R := TRectangle3D.Create(Viewport); 
    R.Parent := Viewport; 
    R.Projection := TProjection.Screen; 
    R.Width := Viewport.Width; 
    R.Height := Viewport.Height; 
    R.Depth := 0; 

    // Create a texture for the front and the back 
    matFront := TTextureMaterialSource.Create(Viewport); 
    aTabControl.ActiveTab := aFront; 
    matFront.Texture := aTabControl.MakeScreenshot; 
    R.MaterialSource := matFront; 

    matBack := TTextureMaterialSource.Create(Viewport); 
    aTabControl.ActiveTab := aBack; 
    matBack.Texture := aTabControl.MakeScreenshot; 
    matBack.Texture.FlipHorizontal; 
    R.MaterialBackSource := matBack; 

    // Do the flip 
    Depth := 10; 
    R.Position.Z := Depth; 
    case aDirection of 
    fdNormal : Angle := 180; 
    fdReverse: Angle := -180; 
    end; 
    R.AnimateFloatWait('Position.Z', Depth, 0.1, TAnimationType.InOut, TInterpolationType.Linear); 

    R.AnimateFloatWait('RotationAngle.Y', Angle, 0.5, 
         TAnimationType(cbAnimationType.ItemIndex), {best is In} 
         TInterpolationType(cbInterpolationType.ItemIndex)); {best is Back} 
    R.AnimateFloatWait('Position.Z', 0, 0.1, TAnimationType.InOut, TInterpolationType.Linear); 

    // Clear viewport and its children 
    Viewport.DisposeOf; 
end;