微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Swift中的低级动画

如何解决Swift中的低级动画

我有50个多边形。
多边形的属性在“ pol”阵列上,几何形状在“ dat”上。
在大约10秒钟的时间内,所有多边形都会进行2种颜色插值,同时它们会在屏幕上移动。
每个多边形都从一种特定的颜色开始,并在大约2秒钟的时间内内插到一种新的颜色。
结束前2秒钟,每个多边形将插值为第三种颜色

这是Matlab代码,我想快速编写。
我没有很快的经验,所以我必须学习动画。
我不希望您提供代码
我想知道这是否可行,尤其是我暂停执行的部分。
如果您可以给我一些参考甚至关键词来搜索它,也将有很大帮助。 谢谢

% Array with the geometry of the polygons  
dat=zeros(10000,2);

% Array with the list of view updates
vlist=zeros(100,5);
% vlist(-,1)        Graphics handle of the polygon
% vlist(-,2)        Type of update,1 geometry,2 color
% vlist(-,3:5)      Properties of update,either entries on dat or rgb color 

% pol is an array with 50 rows and 18 columns
% There is a total of 50 polygons 
% pol(-,1)          Graphics handle of the polygon
% pol(-,2:3)        Coordinates of the polygon on dat array
% pol(-,4:5)        Motion animation,start and final step
% pol(-,6:7)        Color interpolation 1,8:9)        Color interpolation 2,10:12)      Start rgb color of interpolation 1
% pol(-,13:15)      Final rgb color of interpolation 1,also start of 2
% pol(-,16:18)      Final rgb color of interpolation 2

t_tot=10;               % Total time of the animation is seconds
fps=30;                 % Frames per second
dt=1/fps;               % Time step in seconds
s_final=t_tot * fps;    % Final step of the animation

for i=1:s_final
    % Counter of updates to the polygons,either geometry or color 
    iv=0;
    % Get the time at the start of the i step
    time1=tic;

    for j=1:50
        % Update the geometry of the j polygon
        if i>=pol(j,4) && i<=pol(j,5)
            % Do some geometry calculations,translations,% rotations,enlargements

            % Add the geometry update to the update list 
            iv=iv+1;    vlist(iv,1:5)=[pol(j,1),1,pol(j,2:3),0]
        end

        % Update the color of the j polygon,interpolation 1
        if i>=pol(j,6) && i<=pol(j,7)
            % Use the current step to interpolate the color

            % Add the color update to the update list 
            iv=iv+1;    vlist(iv,2,color]
        end

        % Update the color of the j polygon,interpolation 2
        if i>=pol(j,8) && i<=pol(j,9)
            % Use the current step to interpolate the color

            % Add the color update to the update list 
            iv=iv+1;    vlist(iv,color]
        end
    end

    % Sent all updates to the view function
    updateview(iv,vlist,dat)

    % Get the time at the end of the i step
    time2=toc;
    
    % Calculate the remaining amount of time and pause execution
    twait=dt-(time2-time1)
    pause(twait)
end

解决方法

幸运的是,Apple提供了用于管理2D甚至3D图形的即插即用解决方案。我想您的新朋友可能是“ SpriteKit”,其中包括移动精灵,制作粒子效果,调整大小和移动动画等2D内容。对于iOS / iPadOS设备,它已经在后台进行了很多优化。

Apple解决方案的3D版本是SceneKit。

您还可以使用Metal来“低级”访问GPU。

https://developer.apple.com/spritekit/

https://developer.apple.com/documentation/scenekit/

https://developer.apple.com/metal/

您也可以签出一些第三方库,但我认为这些是在iOS / iPadOS上使用的方式。 (除了Unity,虚幻引擎等。引擎)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。