如何解决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 举报,一经查实,本站将立刻删除。