ایجاد و ویرایش رفتارهای سفارشی انیمیشن در C++
بررسی کلی
رفتارهای سفارشی انیمیشن به شما امکان کنترل عملیاتهای منفرد داخل یک اثر انیمیشنی را میدهند، مانند تغییر رنگ، چرخاندن یک شکل، یا دنبال کردن مسیر حرکتی قابل ویرایش. این راهنما نشان میدهد چگونه رفتارها را ایجاد و ترکیب کنید، زمانبندی آنها را تنظیم کنید، انیمیشنهای موجود را بررسی و اصلاح کنید، و اطمینان حاصل کنید که ویژگیهای آنها پس از ذخیره و باز کردن مجدد یک ارائه حفظ میشوند.
برای جلوههای از پیش تعریفشده و محرکهای کلیک، به انیمیشن شکل مراجعه کنید.
درک مدل انیمیشن
یک انیمیشن به صورت Timeline → Sequence → Effect → Behaviors سازماندهی میشود:
- اسلاید get_Timeline خود را شامل توالی اصلی و توالیهای تعاملی میسازد.
- یک ISequence شامل افکتها است که ممکن است به شکلهای مختلف هدفگذاری شوند.
- یک IEffect شکل هدف، پیشتنظیم، زیرنوع و زمانبندی افکت را شناسایی میکند.
- IEffect::get_Behaviors حاوی عملیاتهایی است که اثر را پیادهسازی میکنند: تغییر رنگ، حرکت، چرخش، تنظیم یک ویژگی و غیره.
ایجاد رفتارهای منفرد
از ISequence::AddEffect برای ایجاد یک افکت و دسترسی به مجموعه get_Behaviors آن استفاده کنید. یک پیشتنظیم میتواند این مجموعه را بهصورت خودکار پر کند. هنگام گسترش پیشتنظیم، عملیاتهای آن را حفظ کنید یا برای جایگزینی عمدی از Clear استفاده کنید.
IBehaviorFactory هشت نوع رفتار نشاندادهشده در ادامه را میسازد. حرکت در بخش ساخت مسیر حرکتی پوشانده شده است. هر مثال ساخت بهصورت کد مستقل داخل یک تابع اجرا میشود؛ مثالهای ویرایش بعدی مشخص میکنند از کدام فایل خروجی استفاده میکنند.
چرخش
از CreateRotationEffect برای ایجاد یک چرخش استفاده کنید. get_By زاویهٔ نسبی برحسب درجه را مشخص میکند؛ get_From و get_To نقاط انتهایی را تعیین میکنند.
مثال با یک اثر Spin آغاز میشود، عملیات پیشتنظیم آن را با یک رفتار چرخش جایگزین میکند و به آن عملیات مدت زمان دو ثانیه میدهد. زاویهٔ نسبی ۹۰ درجه یک چرخش چهارگانه از جهت اولیهٔ شکل را بیان میکند، بنابراین نیازی به زاویهٔ شروع صریح نیست.
#include <DOM/Animation/BehaviorFactory.h>
#include <DOM/Animation/EffectSubtype.h>
#include <DOM/Animation/EffectTriggerType.h>
#include <DOM/Animation/EffectType.h>
#include <DOM/Animation/IBehaviorCollection.h>
#include <DOM/Animation/IEffect.h>
#include <DOM/Animation/IRotationEffect.h>
#include <DOM/Animation/ISequence.h>
#include <DOM/Animation/ITiming.h>
#include <DOM/IAnimationTimeLine.h>
#include <DOM/IAutoShape.h>
#include <DOM/IShapeCollection.h>
#include <DOM/ISlide.h>
#include <DOM/Presentation.h>
#include <DOM/ShapeType.h>
#include <Export/SaveFormat.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Animation;
using namespace Aspose::Slides::Export;
using namespace System;
auto presentation = MakeObject<Presentation>();
auto slide = presentation->get_Slide(0);
auto shape = slide->get_Shapes()->AddAutoShape(ShapeType::Rectangle, 100, 100, 160, 80);
auto effect = slide->get_Timeline()->get_MainSequence()->AddEffect(shape, EffectType::Spin, EffectSubtype::None, EffectTriggerType::OnClick);
effect->get_Behaviors()->Clear();
auto factory = MakeObject<BehaviorFactory>();
auto rotation = factory->CreateRotationEffect();
rotation->set_By(90.0f);
rotation->get_Timing()->set_Duration(2.0f);
effect->get_Behaviors()->Add(rotation);
presentation->Save(u"rotation.pptx", SaveFormat::Pptx);
presentation->Dispose();
rotation.pptx شامل یک شکل و یک رفتار چرخش است. مجموعه، زمانبندی و مثالهای ویرایش چرخش در زیر از این فایل استفاده میکنند.
مقیاس
از CreateScaleEffect با درصدهای X/Y استفاده کنید: get_From و get_To اندازهٔ آغاز و پایان را توصیف میکنند، در حالی که get_By تغییر نسبی را توضیح میدهد. در اینجا، ۱۰۰ به معنای اندازهٔ اصلی است.
مثال ابعاد هر دو جهت را از ۱۰۰٪ به ۱۲۵٪ در طول دو ثانیه بزرگ میکند. استفاده از درصدهای مساوی افقی و عمودی نسبتهای شکل را حفظ میکند؛ درصدهای متفاوت یک بعد را بیشتر از دیگری میکشاند.
#include <DOM/Animation/BehaviorFactory.h>
#include <DOM/Animation/EffectSubtype.h>
#include <DOM/Animation/EffectTriggerType.h>
#include <DOM/Animation/EffectType.h>
#include <DOM/Animation/IBehaviorCollection.h>
#include <DOM/Animation/IEffect.h>
#include <DOM/Animation/IScaleEffect.h>
#include <DOM/Animation/ISequence.h>
#include <DOM/Animation/ITiming.h>
#include <DOM/IAnimationTimeLine.h>
#include <DOM/IAutoShape.h>
#include <DOM/IShapeCollection.h>
#include <DOM/ISlide.h>
#include <DOM/Presentation.h>
#include <DOM/ShapeType.h>
#include <Export/SaveFormat.h>
#include <drawing/point_f.h>
#include <system/array.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Animation;
using namespace Aspose::Slides::Export;
using namespace System;
using namespace System::Drawing;
auto presentation = MakeObject<Presentation>();
auto slide = presentation->get_Slide(0);
auto shape = slide->get_Shapes()->AddAutoShape(ShapeType::Rectangle, 100, 100, 160, 80);
auto effect = slide->get_Timeline()->get_MainSequence()->AddEffect(shape, EffectType::GrowShrink, EffectSubtype::None, EffectTriggerType::OnClick);
effect->get_Behaviors()->Clear();
auto factory = MakeObject<BehaviorFactory>();
auto scale = factory->CreateScaleEffect();
scale->set_From(PointF(100, 100));
scale->set_To(PointF(125, 125));
scale->get_Timing()->set_Duration(2.0f);
effect->get_Behaviors()->Add(scale);
presentation->Save(u"scale.pptx", SaveFormat::Pptx);
presentation->Dispose();
رنگ
از CreateColorEffect برای تغییر پر از آبی به نارنجی استفاده کنید. get_From و get_To رنگها هستند؛ get_By جابجایی رنگ است. IBehavior::get_Properties ویژگی ای را که انیمیشن میشود شناسایی میکند.
پر جامد شکل ابتدا به رنگ آبی تنظیم میشود تا با رنگ آغاز انیمیشن مطابقت داشته باشد. انتخاب ویژگی fill-color به رفتار میگوید کدام بخش شکل تغییر کند؛ تنها نقاط انتهایی رنگ، آن ویژگی را مشخص نمیکنند. افکت ذخیرهشده توصیفگر انتقال دو ثانیهای به نارنجی است.
#include <DOM/Animation/BehaviorFactory.h>
#include <DOM/Animation/BehaviorProperty.h>
#include <DOM/Animation/EffectSubtype.h>
#include <DOM/Animation/EffectTriggerType.h>
#include <DOM/Animation/EffectType.h>
#include <DOM/Animation/IBehaviorCollection.h>
#include <DOM/Animation/IBehaviorPropertyCollection.h>
#include <DOM/Animation/IColorEffect.h>
#include <DOM/Animation/IEffect.h>
#include <DOM/Animation/ISequence.h>
#include <DOM/Animation/ITiming.h>
#include <DOM/FillType.h>
#include <DOM/IAnimationTimeLine.h>
#include <DOM/IAutoShape.h>
#include <DOM/IColorFormat.h>
#include <DOM/IFillFormat.h>
#include <DOM/IShapeCollection.h>
#include <DOM/ISlide.h>
#include <DOM/Presentation.h>
#include <DOM/ShapeType.h>
#include <Export/SaveFormat.h>
#include <drawing/color.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Animation;
using namespace Aspose::Slides::Export;
using namespace System;
using namespace System::Drawing;
auto presentation = MakeObject<Presentation>();
auto slide = presentation->get_Slide(0);
auto shape = slide->get_Shapes()->AddAutoShape(ShapeType::Rectangle, 100, 100, 160, 80);
shape->get_FillFormat()->set_FillType(FillType::Solid);
shape->get_FillFormat()->get_SolidFillColor()->set_Color(Color::get_Blue());
auto effect = slide->get_Timeline()->get_MainSequence()->AddEffect(shape, EffectType::ChangeFillColor, EffectSubtype::None, EffectTriggerType::OnClick);
effect->get_Behaviors()->Clear();
auto factory = MakeObject<BehaviorFactory>();
auto color = factory->CreateColorEffect();
color->get_Properties()->Add(BehaviorProperty::get_FillColor()->get_Value());
color->get_From()->set_Color(Color::get_Blue());
color->get_To()->set_Color(Color::get_Orange());
color->get_Timing()->set_Duration(2.0f);
effect->get_Behaviors()->Add(color);
presentation->Save(u"color.pptx", SaveFormat::Pptx);
presentation->Dispose();
فیلتر
از CreateFilterEffect برای انتخاب یک wipe استفاده کنید. get_Type، get_Subtype و get_Reveal به ترتیب فیلتر، جهت و این که شکل را نشان دهد یا مخفی کند، مشخص میکنند.
این مثال یک wipe دو ثانیهای پیکربندی میکند که شکل را با جهت right‑subtype نشان میدهد. تنظیمات فیلتر متعلق به رفتار داخل افکت هستند، بنابراین پس از حذف عملیات اصلی پیشتنظیم، پیکربندی میشوند.
#include <DOM/Animation/BehaviorFactory.h>
#include <DOM/Animation/EffectSubtype.h>
#include <DOM/Animation/EffectTriggerType.h>
#include <DOM/Animation/EffectType.h>
#include <DOM/Animation/FilterEffectRevealType.h>
#include <DOM/Animation/FilterEffectSubtype.h>
#include <DOM/Animation/FilterEffectType.h>
#include <DOM/Animation/IBehaviorCollection.h>
#include <DOM/Animation/IEffect.h>
#include <DOM/Animation/IFilterEffect.h>
#include <DOM/Animation/ISequence.h>
#include <DOM/Animation/ITiming.h>
#include <DOM/IAnimationTimeLine.h>
#include <DOM/IAutoShape.h>
#include <DOM/IShapeCollection.h>
#include <DOM/ISlide.h>
#include <DOM/Presentation.h>
#include <DOM/ShapeType.h>
#include <Export/SaveFormat.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Animation;
using namespace Aspose::Slides::Export;
using namespace System;
auto presentation = MakeObject<Presentation>();
auto slide = presentation->get_Slide(0);
auto shape = slide->get_Shapes()->AddAutoShape(ShapeType::Rectangle, 100, 100, 160, 80);
auto effect = slide->get_Timeline()->get_MainSequence()->AddEffect(shape, EffectType::Wipe, EffectSubtype::None, EffectTriggerType::OnClick);
effect->get_Behaviors()->Clear();
auto factory = MakeObject<BehaviorFactory>();
auto filter = factory->CreateFilterEffect();
filter->set_Type(FilterEffectType::Wipe);
filter->set_Subtype(FilterEffectSubtype::Right);
filter->set_Reveal(FilterEffectRevealType::In);
filter->get_Timing()->set_Duration(2.0f);
effect->get_Behaviors()->Add(filter);
presentation->Save(u"filter.pptx", SaveFormat::Pptx);
presentation->Dispose();
ویژگی
از CreatePropertyEffect برای انیمیشن شفافیت استفاده کنید. get_From، get_To و get_By رشتههایی هستند که با استفاده از get_ValueType و get_CalcMode تفسیر میشوند. بهجای تنظیم سه مقدار بهصورت همزمان، بهتر است انتهاها یا جابجایی نسبی را انتخاب کنید.
در اینجا ویژگی انتخابشده شفافیت است و رشتههای عددی نشاندهندۀ تغییری از ۲۵٪ شفافیت به شفافیت کامل. درونیابی خطی توصیفگر تغییر تدریجی بین این مقادیر است. هنگام تطبیق این مثال برای ویژگی دیگر، نوع مقدار و مقادیر انتهایی متناسب را انتخاب کنید.
#include <DOM/Animation/BehaviorFactory.h>
#include <DOM/Animation/BehaviorProperty.h>
#include <DOM/Animation/EffectSubtype.h>
#include <DOM/Animation/EffectTriggerType.h>
#include <DOM/Animation/EffectType.h>
#include <DOM/Animation/IBehaviorCollection.h>
#include <DOM/Animation/IBehaviorPropertyCollection.h>
#include <DOM/Animation/IEffect.h>
#include <DOM/Animation/IPropertyEffect.h>
#include <DOM/Animation/ISequence.h>
#include <DOM/Animation/ITiming.h>
#include <DOM/Animation/PropertyCalcModeType.h>
#include <DOM/Animation/PropertyValueType.h>
#include <DOM/IAnimationTimeLine.h>
#include <DOM/IAutoShape.h>
#include <DOM/IShapeCollection.h>
#include <DOM/ISlide.h>
#include <DOM/Presentation.h>
#include <DOM/ShapeType.h>
#include <Export/SaveFormat.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Animation;
using namespace Aspose::Slides::Export;
using namespace System;
auto presentation = MakeObject<Presentation>();
auto slide = presentation->get_Slide(0);
auto shape = slide->get_Shapes()->AddAutoShape(ShapeType::Rectangle, 100, 100, 160, 80);
auto effect = slide->get_Timeline()->get_MainSequence()->AddEffect(shape, EffectType::Fade, EffectSubtype::None, EffectTriggerType::OnClick);
effect->get_Behaviors()->Clear();
auto factory = MakeObject<BehaviorFactory>();
auto property = factory->CreatePropertyEffect();
property->get_Properties()->Add(BehaviorProperty::get_StyleOpacity()->get_Value());
property->set_ValueType(PropertyValueType::Number);
property->set_CalcMode(PropertyCalcModeType::Linear);
property->set_From(u"0.25");
property->set_To(u"1");
property->get_Timing()->set_Duration(2.0f);
effect->get_Behaviors()->Add(property);
presentation->Save(u"property.pptx", SaveFormat::Pptx);
presentation->Dispose();
تنظیم
از CreateSetEffect برای اختصاص قابلیت دیده شدن از طریق get_To استفاده کنید. یک رفتار set بین دو نقطهٔ انتهایی درونیسازی نمیکند.
مثال ویژگی visible را انتخاب میکند و رشته visible را هنگام اجرا به رفتار تخصیص میدهد. در C++ قبل از تخصیص باید رشته را بهصورت شیء بپوشانید. مستطیل در این ارائهٔ کمینه قبلاً قابل رؤیت است، بنابراین این تخصیص ممکن است بهتنهایی تغییر بصری واضحی ایجاد نکند. چنین عملی برای ترکیب با افکت بزرگتری مفید است که زمان پنهان یا نمایان شدن شکل را نیز کنترل میکند.
#include <DOM/Animation/BehaviorFactory.h>
#include <DOM/Animation/BehaviorProperty.h>
#include <DOM/Animation/EffectSubtype.h>
#include <DOM/Animation/EffectTriggerType.h>
#include <DOM/Animation/EffectType.h>
#include <DOM/Animation/IBehaviorCollection.h>
#include <DOM/Animation/IBehaviorPropertyCollection.h>
#include <DOM/Animation/IEffect.h>
#include <DOM/Animation/ISequence.h>
#include <DOM/Animation/ISetEffect.h>
#include <DOM/IAnimationTimeLine.h>
#include <DOM/IAutoShape.h>
#include <DOM/IShapeCollection.h>
#include <DOM/ISlide.h>
#include <DOM/Presentation.h>
#include <DOM/ShapeType.h>
#include <Export/SaveFormat.h>
#include <system/object_ext.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Animation;
using namespace Aspose::Slides::Export;
using namespace System;
auto presentation = MakeObject<Presentation>();
auto slide = presentation->get_Slide(0);
auto shape = slide->get_Shapes()->AddAutoShape(ShapeType::Rectangle, 100, 100, 160, 80);
auto effect = slide->get_Timeline()->get_MainSequence()->AddEffect(shape, EffectType::Appear, EffectSubtype::None, EffectTriggerType::OnClick);
effect->get_Behaviors()->Clear();
auto factory = MakeObject<BehaviorFactory>();
auto set = factory->CreateSetEffect();
set->get_Properties()->Add(BehaviorProperty::get_StyleVisibility()->get_Value());
auto visibility = ObjectExt::Box<String>(u"visible");
set->set_To(visibility);
effect->get_Behaviors()->Add(set);
presentation->Save(u"set.pptx", SaveFormat::Pptx);
presentation->Dispose();
دستورات
از CreateCommandEffect استفاده کنید و get_Type، get_CommandString و get_ShapeTarget را پیکربندی کنید. یک فایل صوتی WAV به نام sample.wav را در پوشهٔ کاری قرار دهید. این مثال آن را با AddAudioFrameEmbedded تعبیه میکند و یک دستور play به قاب صوتی پیوست میشود.
قاب صوتی هم هدف افکت و هم هدف دستور است. این اتصال درخواست play را به ضبط تعبیهشده میسازد؛ یک رشتهٔ دستور به تنهایی شیء رسانهای مورد کنترل را مشخص نمیکند. افکت برای شروع در یک کلیک هنگام نمایش اسلاید تنظیم میشود.
#include <DOM/Animation/BehaviorFactory.h>
#include <DOM/Animation/CommandEffectType.h>
#include <DOM/Animation/EffectSubtype.h>
#include <DOM/Animation/EffectTriggerType.h>
#include <DOM/Animation/EffectType.h>
#include <DOM/Animation/IBehaviorCollection.h>
#include <DOM/Animation/ICommandEffect.h>
#include <DOM/Animation/IEffect.h>
#include <DOM/Animation/ISequence.h>
#include <DOM/IAnimationTimeLine.h>
#include <DOM/IAudioFrame.h>
#include <DOM/IShapeCollection.h>
#include <DOM/ISlide.h>
#include <DOM/Presentation.h>
#include <Export/SaveFormat.h>
#include <system/io/file.h>
#include <system/io/file_stream.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Animation;
using namespace Aspose::Slides::Export;
using namespace System;
auto presentation = MakeObject<Presentation>();
auto slide = presentation->get_Slide(0);
auto audioStream = IO::File::OpenRead(u"sample.wav");
auto audioFrame = slide->get_Shapes()->AddAudioFrameEmbedded(100, 100, 40, 40, audioStream);
auto effect = slide->get_Timeline()->get_MainSequence()->AddEffect(audioFrame, EffectType::MediaPlay, EffectSubtype::None, EffectTriggerType::OnClick);
effect->get_Behaviors()->Clear();
auto factory = MakeObject<BehaviorFactory>();
auto command = factory->CreateCommandEffect();
command->set_Type(CommandEffectType::Call);
command->set_CommandString(u"play");
command->set_ShapeTarget(audioFrame);
effect->get_Behaviors()->Add(command);
presentation->Save(u"command.pptx", SaveFormat::Pptx);
audioStream->Close();
presentation->Dispose();
ذخیرهسازی دستور را در command.pptx ذخیره میکند؛ ضبط را پخش نمیکند. پخش نیاز به پخشکنندهٔ اسلایدنمایشی دارد که از این دستور و هدف رسانهای آن پشتیبانی کند.
مدیریت مجموعهٔ رفتارها
IBehaviorCollection از Add، Insert، Remove و RemoveAt پشتیبانی میکند. این مثال rotation.pptx را باز میکند، مقیاسگذاری اضافه میکند، قبل از چرخش جابهجا مینماید و سپس چرخش را حذف میکند. حذف و افزودن مجدد همان شیء موقعیت ذخیرهشدهٔ آن را بدون ایجاد نسخهٔ جدید تغییر میدهد.
دنبالهٔ ویرایشها مجموعه را از rotation‑scale به scale‑rotation و سپس به تنها scale تغییر میدهد. اندیسها به مجموعهٔ جاری ارجاع میدهند، بنابراین حذف از اندیس جدید چرخش پس از بازچینش استفاده میکند. شمارش نهایی نشان میدهد کدام رفتار ذخیره خواهد شد.
#include <DOM/Animation/BehaviorFactory.h>
#include <DOM/Animation/IBehaviorCollection.h>
#include <DOM/Animation/IEffect.h>
#include <DOM/Animation/IScaleEffect.h>
#include <DOM/Animation/ISequence.h>
#include <DOM/Animation/ITiming.h>
#include <DOM/IAnimationTimeLine.h>
#include <DOM/ISlide.h>
#include <DOM/Presentation.h>
#include <Export/SaveFormat.h>
#include <drawing/point_f.h>
#include <system/array.h>
#include <system/console.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Animation;
using namespace Aspose::Slides::Export;
using namespace System;
using namespace System::Drawing;
auto presentation = MakeObject<Presentation>(u"rotation.pptx");
auto effect = presentation->get_Slide(0)->get_Timeline()->get_MainSequence()->idx_get(0);
auto behaviors = effect->get_Behaviors();
auto factory = MakeObject<BehaviorFactory>();
auto scale = factory->CreateScaleEffect();
scale->set_To(PointF(125, 125));
scale->get_Timing()->set_Duration(2.0f);
behaviors->Add(scale);
behaviors->Remove(scale);
behaviors->Insert(0, scale);
behaviors->RemoveAt(1);
for (auto behavior : behaviors)
Console::WriteLine(behavior->GetType().get_Name());
presentation->Save(u"collection-edited.pptx", SaveFormat::Pptx);
presentation->Dispose();
خروجی ScaleEffect است: فقط مقیاسگذاری باقی مانده است. ترتیب مجموعه به خودی خود زمانبندی رفتارها را پشت سر هم تنظیم نمیکند. فقط وقتی همهٔ عملیات را جایگزین میکنید از Clear استفاده کنید.
پیکربندی زمانبندی رفتار
IBehavior::get_Timing، مستقل از IEffect::get_Timing، ITiming را باز میکند. زمانبندی افکت زمانبندی افکت محاطی را برنامهریزی میکند؛ زمانبندی رفتار یک عملیات داخلی آن را توصیف میکند.
تنظیم مدت زمان، تاخیر، تکرار و شتاب
rotation.pptx را باز کرده و get_Duration و get_TriggerDelayTime را بر حسب ثانیه تنظیم کنید، سپس get_RepeatCount را پیکربندی کنید. get_Accelerate و get_Decelerate بخشهایی از مدت زمان هستند؛ مجموع آنها حداکثر ۱ باشد.
فایل ورودی همان فایلی است که در مثال چرخش ساخته شد و اولین رفتار آن یک چرخش شناختهشده است. این مثال فقط زمانبندی آن رفتار را تغییر میدهد؛ زاویهٔ ۹۰ درجه دست نخورده میماند. جداسازی زاویه و زمانبندی، تنظیم سرعت را بدون بازسازی انیمیشن آسانتر میکند.
#include <DOM/Animation/IBehaviorCollection.h>
#include <DOM/Animation/IEffect.h>
#include <DOM/Animation/IRotationEffect.h>
#include <DOM/Animation/ISequence.h>
#include <DOM/Animation/ITiming.h>
#include <DOM/IAnimationTimeLine.h>
#include <DOM/ISlide.h>
#include <DOM/Presentation.h>
#include <Export/SaveFormat.h>
#include <system/object_ext.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Animation;
using namespace Aspose::Slides::Export;
using namespace System;
auto presentation = MakeObject<Presentation>(u"rotation.pptx");
auto effect = presentation->get_Slide(0)->get_Timeline()->get_MainSequence()->idx_get(0);
auto rotation = ExplicitCast<IRotationEffect>(effect->get_Behaviors()->idx_get(0));
rotation->get_Timing()->set_Duration(2.0f);
rotation->get_Timing()->set_TriggerDelayTime(0.5f);
rotation->get_Timing()->set_RepeatCount(3.0f);
rotation->get_Timing()->set_Accelerate(0.2f);
rotation->get_Timing()->set_Decelerate(0.2f);
presentation->Save(u"timing.pptx", SaveFormat::Pptx);
presentation->Dispose();
رفتار دو ثانیه مدت زمان، نیمثانیه تاخیر و شمارش تکرار ۳ دارد. ۲۰٪ اول و آخر مدت زمان برای شتاب و کاهـش استفاده میشود.
سیاستهای تکرار دیگر شامل get_RepeatDuration، get_RepeatUntilEndSlide، و get_RepeatUntilNextClick هستند؛ یک سیاست را انتخاب کنید نه اینکه همه را همزمان فعال کنید. get_AutoReverse پس از عبور پیشرو انیمیشن را بهعکس اجرا میکند. شتاب و کاهـش برای تغییرات پیوسته اعمال میشوند، نه برای مقادیر گسسته یا دستورات.
ساخت مسیر حرکتی
از CreateMotionEffect برای ایجاد حرکت استفاده کنید. get_From، get_To و get_By مختصات یا جابجاییهای مبتنی بر درصد را توصیف میکنند. برای مسیر قابل ویرایش، یک MotionPath ایجاد کنید و آن را به IMotionEffect::get_Path اختصاص دهید. IMotionPath دستورات مسیر را ذخیره میکند.
MotionCommandPathType عملیات را انتخاب میکند:
| فرمان | نقاط | معنی |
|---|---|---|
| MoveTo | یک | تعیین موقعیت شروع. |
| LineTo | یک | حرکت در یک قطعهٔ مستقیم به نقطهٔ انتهایی آن. |
| CurveTo | سه | دنبال کردن منحنی مکعبی تعریفشده توسط دو نقطهٔ کنترل و یک نقطهٔ انتهایی. |
| CloseLoop | هیچ | بازگشت به موقعیت شروع. |
| End | هیچ | پایان مسیر. |
MotionPathPointsType ویژگیهای ویرایش نقطه را توصیف میکند، مانند نقطهٔ گوشه یا صاف. این نوع نقطه جایگزین نوع فرمان نمیشود. برای مثال منحنی زیر، از نوع نقطهٔ منحنی استفاده کنید و برای قطعات مستقیم از نوع نقطهٔ گوشه.
مختصات مسیر نسبت به ابعاد اسلاید نرمالسازی میشود: جابهجایی X برابر ۰٫۲۵ نشاندهندۀ یکچهارم عرض اسلاید است، نه ۰٫۲۵ پوینت. Y مثبت به سمت پایین دارد. دستورات مطلق موقعیتها را در سیستم مختصات مسیر مشخص میکنند؛ دستورات نسبی جابجاییها را نسبت به موقعیت جاری بیان میکنند. این امر مستقل از get_Origin است که چهارچوب مرجع مسیر را انتخاب میکند و از get_PathEditMode که نحوهٔ حرکت مسیر هنگام جابهجایی شکل را کنترل میکند.
ایجاد مسیر مستقیم
یک رفتار حرکتی با نقطهٔ شروع، یک قطعهٔ مستقیم و یک فرمان پایان ایجاد کنید. IMotionPath::Add نوع فرمان، نقاط آن، نوع نقطه و پرچم مختصات نسبی را میگیرد.
فرمان شروع (0, 0) را تنظیم میکند و خط به (0.25, 0) ختم میشود، که مسیر را یکچهارم عرض اسلاید افقی میسازد. فرمان پایان هیچ نقطهٔ مختصاتی ندارد. پس از اختصاص مسیر، افزودن رفتار حرکتی به افکت آن مسیر را به مستطیل متصل میکند.
#include <DOM/Animation/BehaviorFactory.h>
#include <DOM/Animation/EffectSubtype.h>
#include <DOM/Animation/EffectTriggerType.h>
#include <DOM/Animation/EffectType.h>
#include <DOM/Animation/IBehaviorCollection.h>
#include <DOM/Animation/IEffect.h>
#include <DOM/Animation/IMotionCmdPath.h>
#include <DOM/Animation/IMotionEffect.h>
#include <DOM/Animation/IMotionPath.h>
#include <DOM/Animation/ISequence.h>
#include <DOM/Animation/ITiming.h>
#include <DOM/Animation/MotionCommandPathType.h>
#include <DOM/Animation/MotionOriginType.h>
#include <DOM/Animation/MotionPath.h>
#include <DOM/Animation/MotionPathPointsType.h>
#include <DOM/IAnimationTimeLine.h>
#include <DOM/IAutoShape.h>
#include <DOM/IShapeCollection.h>
#include <DOM/ISlide.h>
#include <DOM/Presentation.h>
#include <DOM/ShapeType.h>
#include <Export/SaveFormat.h>
#include <drawing/point_f.h>
#include <system/array.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Animation;
using namespace Aspose::Slides::Export;
using namespace System;
using namespace System::Drawing;
auto presentation = MakeObject<Presentation>();
auto slide = presentation->get_Slide(0);
auto shape = slide->get_Shapes()->AddAutoShape(ShapeType::Rectangle, 100, 100, 160, 80);
auto effect = slide->get_Timeline()->get_MainSequence()->AddEffect(shape, EffectType::PathRight, EffectSubtype::None, EffectTriggerType::OnClick);
effect->get_Behaviors()->Clear();
auto factory = MakeObject<BehaviorFactory>();
auto motion = factory->CreateMotionEffect();
motion->set_Origin(MotionOriginType::Layout);
motion->get_Timing()->set_Duration(2.0f);
auto path = MakeObject<MotionPath>();
auto startPoints = MakeArray<PointF>({ PointF(0, 0) });
path->Add(MotionCommandPathType::MoveTo, startPoints, MotionPathPointsType::Auto, false);
auto linePoints = MakeArray<PointF>({ PointF(0.25f, 0) });
path->Add(MotionCommandPathType::LineTo, linePoints, MotionPathPointsType::Corner, false);
auto endPoints = MakeArray<PointF>(0);
path->Add(MotionCommandPathType::End, endPoints, MotionPathPointsType::None, false);
motion->set_Path(path);
effect->get_Behaviors()->Add(motion);
presentation->Save(u"motion.pptx", SaveFormat::Pptx);
presentation->Dispose();
motion.pptx شامل یک رفتار حرکتی با سه فرمان مسیر است. مثالهای ویرایش فایل زیر از این ساختار شناختهشده استفاده میکنند.
مقایسهٔ مختصات مطلق و نسبی
این دو شیء مسیر همان مسیر را توصیف میکنند. فرمان مطلق در (0.3, 0.1) پایان مییابد؛ فرمان نسبی (0.1, 0.1) را به موقعیت جاری (0.2, 0) اضافه میکند.
هر دو مسیر از همان موقعیت شروع میشوند. برای خط نسبی، جابجاییهای X و Y را به موقعیت جاری اضافه کنید تا نقطهٔ انتهایی بهدست آید؛ برای خط مطلق، نقطهٔ انتهایی را مستقیماً بخوانید. تغییر پرچم بدون تبدیل مختصات مسیر متفاوتی را توصیف میکند.
#include <DOM/Animation/IMotionCmdPath.h>
#include <DOM/Animation/IMotionPath.h>
#include <DOM/Animation/MotionCommandPathType.h>
#include <DOM/Animation/MotionPath.h>
#include <DOM/Animation/MotionPathPointsType.h>
#include <drawing/point_f.h>
#include <system/array.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Animation;
using namespace System;
using namespace System::Drawing;
auto absolutePath = MakeObject<MotionPath>();
auto startPoints = MakeArray<PointF>({ PointF(0.2f, 0) });
absolutePath->Add(MotionCommandPathType::MoveTo, startPoints, MotionPathPointsType::Auto, false);
auto absoluteEndPoints = MakeArray<PointF>({ PointF(0.3f, 0.1f) });
absolutePath->Add(MotionCommandPathType::LineTo, absoluteEndPoints, MotionPathPointsType::Corner, false);
auto relativePath = MakeObject<MotionPath>();
auto relativeStartPoints = MakeArray<PointF>({ PointF(0.2f, 0) });
relativePath->Add(MotionCommandPathType::MoveTo, relativeStartPoints, MotionPathPointsType::Auto, false);
auto relativeOffsets = MakeArray<PointF>({ PointF(0.1f, 0.1f) });
relativePath->Add(MotionCommandPathType::LineTo, relativeOffsets, MotionPathPointsType::Corner, true);
هر یک از این مسیرها را به یک رفتار حرکتی اختصاص دهید تا در ارائه استفاده شود. آرگومان بولی نهایی مختصات نسبی آن فرمان را انتخاب میکند.
جایگزینی یک خط با منحنی
motion.pptx را باز کنید و فرمان خط آن را با یک منحنی مکعبی جایگزین کنید. ابتدا دو نقطهٔ کنترل را و سپس نقطهٔ انتهایی را فراهم کنید.
موقعیت شروع توسط فرمان قبلی داده میشود. دو نقطهٔ اول شکل منحنی را میسازند، در حالی که سوم مقصد نهایی است؛ اینها سه مقصد پیدر‑پی نیستند. بهروزرسانی همزمان نوع فرمان، نوع ویرایش نقطه و آرایهٔ نقاط، بخش را با هندسهٔ جدید سازگار نگه میدارد.
#include <DOM/Animation/IBehaviorCollection.h>
#include <DOM/Animation/IEffect.h>
#include <DOM/Animation/IMotionCmdPath.h>
#include <DOM/Animation/IMotionEffect.h>
#include <DOM/Animation/IMotionPath.h>
#include <DOM/Animation/ISequence.h>
#include <DOM/Animation/MotionCommandPathType.h>
#include <DOM/Animation/MotionPathPointsType.h>
#include <DOM/IAnimationTimeLine.h>
#include <DOM/ISlide.h>
#include <DOM/Presentation.h>
#include <Export/SaveFormat.h>
#include <drawing/point_f.h>
#include <system/array.h>
#include <system/object_ext.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Animation;
using namespace Aspose::Slides::Export;
using namespace System;
using namespace System::Drawing;
auto presentation = MakeObject<Presentation>(u"motion.pptx");
auto effect = presentation->get_Slide(0)->get_Timeline()->get_MainSequence()->idx_get(0);
auto motion = ExplicitCast<IMotionEffect>(effect->get_Behaviors()->idx_get(0));
auto path = motion->get_Path();
path->idx_get(1)->set_CommandType(MotionCommandPathType::CurveTo);
path->idx_get(1)->set_PointsType(MotionPathPointsType::CurveSmooth);
auto curvePoints = MakeArray<PointF>({ PointF(0.1f, 0), PointF(0.2f, 0.1f), PointF(0.3f, 0.1f) });
path->idx_get(1)->set_Points(curvePoints);
presentation->Save(u"curve.pptx", SaveFormat::Pptx);
presentation->Dispose();
مسیر در curve.pptx هنوز سه فرمان دارد؛ فرمان میانی اکنون یک منحنی تعریف میکند.
بررسی و ویرایش مسیر ذخیرهشده
هر IMotionCmdPath get_Points، get_CommandType، get_PointsType و get_IsRelative را نمایش میدهد. مثالهای زیر از مسیر سه‑فرمان شناختهشده در motion.pptx استفاده میکنند. برای ورودی دلخواه، اثر مورد نظر را پیدا کنید و قبل از ویرایش بر اساس اندیس، انواع فرمان و تعداد نقاط را بررسی کنید.
خواندن فرمانها و مختصات
مسیر را بدون تغییر بخوانید. فرمانهای End و CloseLoop نیازی به نقاط ندارند، بنابراین باید آرایهٔ نقاط تهی را قبول کنید.
خروجی هر فرمان را همراه با پرچم مختصات نسبی پیش از فهرست نقاط نشان میدهد. این امکان را میدهد تا قبل از اصلاح مسیر، نقطهٔ انتهایی را از جابجایی تشخیص دهید. یک منحنی سه نقطه فهرست میکند، در حالی که خط مستقیم فقط یک نقطه دارد.
#include <DOM/Animation/IBehaviorCollection.h>
#include <DOM/Animation/IEffect.h>
#include <DOM/Animation/IMotionCmdPath.h>
#include <DOM/Animation/IMotionEffect.h>
#include <DOM/Animation/IMotionPath.h>
#include <DOM/Animation/ISequence.h>
#include <DOM/Animation/MotionCommandPathType.h>
#include <DOM/IAnimationTimeLine.h>
#include <DOM/ISlide.h>
#include <DOM/Presentation.h>
#include <drawing/point_f.h>
#include <system/array.h>
#include <system/console.h>
#include <system/object_ext.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Animation;
using namespace System;
auto presentation = MakeObject<Presentation>(u"motion.pptx");
auto effect = presentation->get_Slide(0)->get_Timeline()->get_MainSequence()->idx_get(0);
auto motion = ExplicitCast<IMotionEffect>(effect->get_Behaviors()->idx_get(0));
auto path = motion->get_Path();
for (auto segment : path)
{
Console::WriteLine(u"{0}, relative: {1}", segment->get_CommandType(), segment->get_IsRelative());
if (segment->get_Points() != nullptr)
for (auto point : segment->get_Points())
Console::WriteLine(u"X={0}, Y={1}", point.get_X(), point.get_Y());
}
presentation->Dispose();
این فهرست شامل نقطهٔ شروع، یک خط مطلق پایانیافته در (0.25, 0) و یک فرمان End است.
تغییر نقطهٔ انتهایی
motion.pptx را باز کنید و آرایهٔ نقاط خط را برای جابجایی نقطهٔ انتهایی آن تعویض کنید.
در فایل ورودی، اندیس 0 فرمان شروع و اندیس 1 خط است. جایگزینی نقطهٔ تک خط مقصد را بدون تغییر نوع فرمان، زمانبندی یا موقعیت آن در مجموعه تغییر میدهد. چون فرمان از مختصات مطلق استفاده میکند، جفت جدید موقعیتی مطلق را مشخص میکند نه جابجایی افزایشی.
#include <DOM/Animation/IBehaviorCollection.h>
#include <DOM/Animation/IEffect.h>
#include <DOM/Animation/IMotionCmdPath.h>
#include <DOM/Animation/IMotionEffect.h>
#include <DOM/Animation/IMotionPath.h>
#include <DOM/Animation/ISequence.h>
#include <DOM/IAnimationTimeLine.h>
#include <DOM/ISlide.h>
#include <DOM/Presentation.h>
#include <Export/SaveFormat.h>
#include <drawing/point_f.h>
#include <system/array.h>
#include <system/object_ext.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Animation;
using namespace Aspose::Slides::Export;
using namespace System;
using namespace System::Drawing;
auto presentation = MakeObject<Presentation>(u"motion.pptx");
auto effect = presentation->get_Slide(0)->get_Timeline()->get_MainSequence()->idx_get(0);
auto motion = ExplicitCast<IMotionEffect>(effect->get_Behaviors()->idx_get(0));
auto endpointPoints = MakeArray<PointF>({ PointF(0.4f, 0.1f) });
motion->get_Path()->idx_get(1)->set_Points(endpointPoints);
presentation->Save(u"motion-endpoint.pptx", SaveFormat::Pptx);
presentation->Dispose();
خط در motion-endpoint.pptx در (0.4, 0.1) پایان مییابد؛ فایل اصلی تغییر نیافته باقی میماند.
جایگزینی یک بخش
از Insert و RemoveAt برای جایگزینی خط در motion.pptx استفاده کنید. درج خط جدید، خط قدیمی را به اندیس 2 منتقل میکند.
این نشان میدهد که چگونه یک شیء فرمان را جایگزین میکنیم نه با ویرایش مختصات موجود آن. پس از درج، مجموعه بهطور موقت شامل فرمان شروع، خط جدید، خط قبلی و فرمان End میشود. حذف اندیس 2 خط قبلی را حذف میکند و مسیر جدید باقی میماند.
#include <DOM/Animation/IBehaviorCollection.h>
#include <DOM/Animation/IEffect.h>
#include <DOM/Animation/IMotionCmdPath.h>
#include <DOM/Animation/IMotionEffect.h>
#include <DOM/Animation/IMotionPath.h>
#include <DOM/Animation/ISequence.h>
#include <DOM/Animation/MotionCommandPathType.h>
#include <DOM/Animation/MotionPathPointsType.h>
#include <DOM/IAnimationTimeLine.h>
#include <DOM/ISlide.h>
#include <DOM/Presentation.h>
#include <Export/SaveFormat.h>
#include <drawing/point_f.h>
#include <system/array.h>
#include <system/object_ext.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Animation;
using namespace Aspose::Slides::Export;
using namespace System;
using namespace System::Drawing;
auto presentation = MakeObject<Presentation>(u"motion.pptx");
auto effect = presentation->get_Slide(0)->get_Timeline()->get_MainSequence()->idx_get(0);
auto motion = ExplicitCast<IMotionEffect>(effect->get_Behaviors()->idx_get(0));
auto path = motion->get_Path();
auto linePoints = MakeArray<PointF>({ PointF(0.2f, 0.1f) });
path->Insert(1, MotionCommandPathType::LineTo, linePoints, MotionPathPointsType::Corner, false);
path->RemoveAt(2);
presentation->Save(u"motion-edited.pptx", SaveFormat::Pptx);
presentation->Dispose();
مسیر ذخیرهشده هنوز سه فرمان دارد؛ خط جدید در (0.2, 0.1) پایان مییابد و فرمان End آخرین است.
اصلاح و تأیید یک رفتار موجود
وقتی اندیس رفتار ناشناخته است، با نوع آن انتخاب کنید. این مثال rotation.pptx را باز میکند، IRotationEffect مربوطه را پیدا میکند، زاویه را تغییر میدهد و پس از باز کردن مجدد مقدار ذخیره‑شده را بررسی میکند.
بررسی نوع اجازه میدهد حلقه رفتارهای غیرچرخشی را عبور دهد. بارگذاری دوم فایل ذخیرهشده را به یک شیء ارائهٔ جداگانه میخواند، بنابراین مقایسه دادههای پایدار را بررسی میکند نه مقادیری که هنوز در حافظه هستند. این مثال همچنان فرض میکند افکت شناختهشده اولین افکت در توالی اصلی است؛ انتخاب رفتار بر اساس نوع، لزوماً افکت صحیح را در یک ارائهٔ دلخواه پیدا نمیکند.
#include <DOM/Animation/IBehaviorCollection.h>
#include <DOM/Animation/IEffect.h>
#include <DOM/Animation/IRotationEffect.h>
#include <DOM/Animation/ISequence.h>
#include <DOM/IAnimationTimeLine.h>
#include <DOM/ISlide.h>
#include <DOM/Presentation.h>
#include <Export/SaveFormat.h>
#include <cmath>
#include <system/console.h>
#include <system/object_ext.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Animation;
using namespace Aspose::Slides::Export;
using namespace System;
auto presentation = MakeObject<Presentation>(u"rotation.pptx");
auto effect = presentation->get_Slide(0)->get_Timeline()->get_MainSequence()->idx_get(0);
for (auto behavior : effect->get_Behaviors())
{
auto rotation = DynamicCast<IRotationEffect>(behavior);
if (rotation != nullptr)
rotation->set_By(180.0f);
}
presentation->Save(u"rotation-edited.pptx", SaveFormat::Pptx);
auto reopened = MakeObject<Presentation>(u"rotation-edited.pptx");
auto savedEffect = reopened->get_Slide(0)->get_Timeline()->get_MainSequence()->idx_get(0);
for (auto behavior : savedEffect->get_Behaviors())
{
auto rotation = DynamicCast<IRotationEffect>(behavior);
if (rotation != nullptr)
Console::WriteLine(u"Rotation preserved: {0}", std::abs(rotation->get_By() - 180.0f) < 0.001f);
}
presentation->Dispose();
reopened->Dispose();
خروجی Rotation preserved: True است. الگوی بررسی نوع را برای سایر رفتارها نیز اعمال کنید. برای بررسی کامل حفظ، شکل هدف، افکت، انواع و ترتیب رفتارها، زمانبندی و فرمانهای مسیر را مقایسه کنید. برای مقادیر شناور از تحمل عددی استفاده کنید. برای یک ارائه با ساختار انیمیشن ناشناخته، به خواندن انیمیشنهای شکل برای عبور توالی اصلی و تعاملی مراجعه کنید.
ترتیب رفتارها، پیشتنظیمها و پخش
ترتیب در IBehaviorCollection همان ترتیب ذخیرهشدهٔ عملیاتهای یک افکت است. این یک پلیلیست نیست که هر رفتار بهصورت خودکار منتظر رفتار قبلی باشد. زمانبندی و افکت محاطی زمانبندی را تعیین میکنند. رفتارها میتوانند همپوشانی داشته باشند و عملیات روی یک ویژگی ممکن است از طریق get_Additive و get_Accumulate با یکدیگر تعامل داشته باشند. فقط با بازچینش مجموعه زمانبندی «حرکت، سپس چرخش» را برنامهریزی نکنید؛ از زمانبندی صریح یا افکتهای جداگانه همانطور که در انیمیشن شکل توضیح داده شده، استفاده کنید.
ieffect::get_Type و ieffect::get_Subtype پیشتنظیم را توصیف میکنند. این توصیف کامل درخت رفتارهای ویرایشی نیست. پیشتنظیم و زیرنوع را قبل از سفارشیسازی رفتارها انتخاب کنید: تغییر پیشتنظیم میتواند مجموعه را بازسازی کرده و عملیات سفارشی شما را حذف کند. برای مثال، تغییر یک پیشتنظیم Spin سفارشی به Fade میتواند رفتار چرخش را با رفتارهای set و filter جایگزین کند. پس از تغییر پیشتنظیم یا زیرنوع، مجدداً مجموعه را بررسی کنید. پاکسازی رفتارهای پیشتنظیم میتواند عملیاتهای قابل مشاهده یا مقداردهی اولیهای را که پیشتنظیم نیاز دارد حذف کند. مثالها بهصورت عمدی از اشکال قابل مشاهده استفاده میکنند و رفتارها را جایگزین مینمایند؛ آنها پیادهسازی هر پیشتنظیم را بازنویسی نمیکنند.
سازگاری فرمتها
حفظ درخت رفتار تضمینکنندهٔ پخش یکسان در هر نمایشگر یا رندر خروجی نیست. دادههای ذخیرهشده و خروجی رندر شده را جداگانه بررسی کنید.
| فرمت یا خروجی | موارد بررسی |
|---|---|
| PPTX | به عنوان فرمت اصلی برای این مثالها استفاده شود. پس از باز کردن مجدد درخت رفتارهای ویرایشی را تأیید کنید، سپس پخش را در نسخهٔ PowerPoint مورد نظر بررسی کنید. |
| PPT | نمایش باینری قدیمی میتواند با PPTX متفاوت باشد. یک چرخه ذخیره‑بازکردن و پخش جداگانه تست کنید؛ عدم استنتاج پشتیبانی از هر ترکیب سفارشی فقط از خروجی موفق PPTX کافی نیست. |
| PDF, PNG, JPEG و سایر تصاویر اسلاید ایستا | شامل نمای ایستای اسلاید هستند، نه مسیر رفتارهای قابل پخش یا فریم نهایی انیمیشن. |
| HTML5 | میتواند انیمیشنهای پشتیبانیشده را هنگام فعالسازی انیمیشن شکل در گزینههای خروجی پخش کند. ترکیبهای سفارشی را در مرورگر تست کنید. |
| Animated GIF | فریمهای رندرشده را ذخیره میکند، نه رفتارهای ویرایشپذیر یا تعاملات کلیک‑محور. حرکت واقعی رندرشده را بررسی کنید. |
| Video | فریمهای انیمیشن را رندر و بهصورت ویدیو کد میکند. پشتیبانی بهصورت انیمیشنها و افکتهای پشتیبانیشده محدود است؛ دستورات و رویدادهای تعاملی تبدیل به یک زمانبندی ویرایشپذیر نمیشوند. |
پرسشهای متداول
چرا افکت من قبل از افزودن رفتارهایی دارد؟
ایجاد یک افکت پیشتنظیم میتواند عملیاتهای زیرین آن را ایجاد کند. پیش از تصمیم برای گسترش پیشتنظیم یا جایگزینی رفتارهای آن، آنها را بررسی کنید.
آیا انتقال یک رفتار به ابتدا باعث میشود ابتدا اجرا شود؟
لزامی نیست. ترتیب مجموعه جایگزین زمانبندی نمیشود. تاخیرها، مدت زمانها و تعاملات بین عملیات روی یک ویژگی را بررسی کنید.
چرا یک فرمان End نقاطی ندارد؟
این فرمان پایان مسیر را نشان میدهد و نیازی به مختصات ندارد. هنگام بررسی مسیر خواندهشده از فایل، برای آرایهٔ نقطهٔ تهی بررسی کنید.
آیا یک دور گرد موفق کافی برای تأیید پخش است؟
نه. باز کردن مجدد فقط حفظ ویژگیهای بررسیشده را تأیید میکند. پخشکنندهٔ اسلاید یا خروجی انیمیشندار را جداگانه تست کنید تا رفتار بصری آن را تأیید کنید.