时间轴和动画包

时间轴和动画包

我正在尝试使用动画包制作一些 pdf,用时间轴控制循环。目的是有一个循环,但到达最后一帧时,点的颜色应该会改变。我的主要问题是:

  1. animateinline 环境不接受标签。在 Javascript 中我应该使用什么动画标签?
  2. 有没有简单的方法可以在最后一帧之后改变我的颜色然后转到第 1 帧?

我的 tex 文件是:

\documentclass{article}
\usepackage{multido,pstricks,xcolor}
\usepackage{animate}

\newwrite\OutFile%
\immediate\openout\OutFile=mytimeline.txt%
\multido{\iMyFrame=0+1}{5}{%
\immediate\write\OutFile{::\iMyFrame x0}}
\immediate\write\OutFile{::5x0:anim.pageNum=1}
\immediate\closeout\OutFile%

\begin{document}
\definecolor{mycolor}{RGB}{100,0,100}
\begin{center}
\begin{animateinline}[poster=first, controls, %
begin={\SpecialCoor\begin{pspicture}(-5,-5)(5,5)},
 %
end={\end{pspicture}},%
timeline=mytimeline.txt]{2}%
\psline{->}(0,-1.5)(0,1.5)\psline{->}(-1.5,0)(1.5,0)
\newframe
\multiframe{5}{iAngle=0+75}{%
\psdot[linecolor=mycolor](1;\iAngle)
\if iAngle=375 {\definecolor{mycolor}{RGB}{100,100,100}}\fi }
\end{animateinline}%
\end{center}
\end{document}

答案1

这是展示时间线文件和animateJavaScript 编程接口基本用法的一个很好的例子。JavaScript 被用于循环播放动画帧的子范围。

我们不想从头开始重复动画,而是想跳回到第二个循环的开始处,该循环从零度位置的绿点开始。为了实现这一点,我们frameNum在到达终点后设置动画对象的属性:

anim.myAnim.frameNum=18;

每当timeline涉及选项时,我们必须区分透明度(在环境中创建animateinline或嵌入\animategraphics)和文件中定义的实际动画帧timeline

在下面的例子中,时间线文件将在和mytimeline.txt之间创建的一组透明胶片组织成动画期间要显示的实际帧。\begin[...]{animateinline}{...}\end{animateinline}

请注意,透明度和帧编号都是从零开始的。

关于文件内 JavaScript 的执行时间的最后说明timeline

JavaScript 在开始显示帧。在当前示例中,我们希望anim.myAnim.frameNum=18结尾序列中最后一帧的描述。为了实现这一点,我们重复最后一帧描述并添加 JavaScript。这个额外的帧实际上并没有显示,因为我们在它出现后就跳转了。

在此处输入图片描述

\documentclass{article} 
\usepackage{pstricks,xcolor}
\usepackage{filecontents}
\usepackage{animate}
\SpecialCoor\psset{unit=2}

% mytimeline.txt
\begin{filecontents*}{mytimeline.txt}
%-------------------------------------------------------------------  
%[*]:[new frame rate]:[<list of transparencies>][:<JavaScript>]  
% `*' in the first column pauses animation
%-------------------------------------------------------------------  
::0x0 , 1 % Frame #0: show axes (transparency #0) permanently (`x0'),
          % overlay dot at starting position (transp. #1)

::2       % Frame #1: overlay next dot position (transp. #2) on axes 
::3       % Frame #2: ... and so on ... 
::4 
::5 
::6 
::7 
::8 
::9 
::10 
::11 
::12 
::13 
::14 
::15 % Frame #14: uses transp. #15 with the first green dot 
::16 
::17 
::18 
::19 % Frame #18: the second cycle starts with a green dot at 0° position (transp. #19) 
::20 
::21 
::22
::23 
::24 
::25 
::26 
::27 
::28 
::29 
::30 
::31 
::32 
::15 % Re-use the green dots from the first cycle 
::16 
::17 
::18 % Last frame #34 
::18: anim.myAnim.frameNum=18; %After last frame, return to frame #18 
\end{filecontents*} 

\begin{document} 
\definecolor{mycolor}{RGB}{100,0,100} 
\begin{center} 
\begin{animateinline}[ 
  label=myAnim, 
  controls, loop,  
  width=\linewidth, 
  begin={\SpecialCoor\begin{pspicture}(-2,-2)(2,2)}, 
  end={\end{pspicture}}, 
  timeline=mytimeline.txt 
]{4}% 
%create "transparencies", to be arranged according to timeline 
  %transparency #0: axes 
  \psline{->}(0,-1.5)(0,1.5)\psline{->}(-1.5,0)(1.5,0) 
  \newframe 
  %transparencies #1 through #18: dots for the first cycle
  \multiframe{18}{iAngle=0+20}{% 
    %green dots on transp. #15 trough #18 
    \psdot[linecolor=\ifnum\iAngle>275 green\else mycolor\fi,dotscale=5](1;\iAngle) 
  } 
  \newframe 
  %transparencies #19 through #32: green dots for the second cycle 
  \multiframe{14}{iAngle=0+20}{% 
    \psdot[linecolor=green,dotscale=5](1;\iAngle) 
  } 
\end{animateinline}% 
\end{center} 
\end{document}

答案2

你所说的“标签”是什么意思?但是,我不明白为什么你要为这么简单的例子添加时间线。没有它也可以:

\documentclass{article}
\usepackage{multido,pstricks,xcolor}
\usepackage{animate}
\SpecialCoor\psset{unit=2}

\begin{document}
\definecolor{mycolor}{RGB}{100,0,100}
\begin{center}
\begin{animateinline}[poster=first, controls, palindrome, 
  begin={\begin{pspicture}(-2,-2)(2,2)},
  end={\end{pspicture}},%
%  timeline=mytimeline.txt
]{2}
  \psline{->}(0,-1.5)(0,1.5)\psline{->}(-1.5,0)(1.5,0)
  \psdot[linecolor=mycolor,dotscale=5](1;0)
  \newframe
  \multiframe{18}{iAngle=20+20}{%
    \psline{->}(0,-1.5)(0,1.5)\psline{->}(-1.5,0)(1.5,0)
    \psdot[linecolor=\ifnum\iAngle>275 green\else mycolor\fi,dotscale=5](1;\iAngle)
     }
\end{animateinline}
\end{center}
\end{document}

在此处输入图片描述

相关内容