This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
cn:orx:tutorials:frame [2010/07/08 20:21 (15 years ago)] – jtianling | cn:orx:tutorials:frame [2020/08/19 20:16 (5 years ago)] (current) – removed sausage | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | 本页由 killman.liu 翻译自原英文教程[[en: | ||
- | |||
- | ====== 帧的创建教程(Frame tutorial) ====== | ||
- | |||
- | ===== 综述 ===== | ||
- | |||
- | 请查看前面的[[main# | ||
- | |||
- | 所有对象的坐标,缩放和旋转都保存在'' | ||
- | 这些帧(frames)被汇编到成一个层次结构,意味着修改父帧的属性将会影响它的所有子帧。 | ||
- | |||
- | 在本篇教程中,我们有四个链接到同一个副对象的对象((一个不可显示的空对象)),还有第五个没有父对象的对象。\\ | ||
- | 前面两个子对象使用父对象的配置属性'' | ||
- | 不可见的父对象间跟踪鼠标指针,左-shift 和 左-ctrl 键将分别放大和缩小父对象,而鼠标左击和右击将使对象旋转。\\ | ||
- | 所有这些变化对将影响它的四个子对象。 | ||
- | |||
- | 这为我们提供了一种简单的方法去创建复杂的或组合的对象,并可十分方便地改变它们(坐标,缩放,旋转,速度 ......)。 | ||
- | |||
- | ===== 详情 ===== | ||
- | |||
- | 在[[main# | ||
- | |||
- | <code c> | ||
- | |||
- | orxViewport_CreateFromConfig(" | ||
- | |||
- | 然后,我们创建父对象。 | ||
- | |||
- | <code c> | ||
- | |||
- | 由于在配置文件里,我们给'' | ||
- | |||
- | <code ini> | ||
- | ChildList = Object3 # Object4</ | ||
- | |||
- | 于是,当我们创建父对象时,那两个子对象(('' | ||
- | 我们可以这样创建全部的四个对象,但是为了学习,我们将在代码中手动创建和连接(link)剩下的两个对象。 | ||
- | |||
- | <code c> | ||
- | orxObject_CreateFromConfig(" | ||
- | pstObject = orxObject_CreateFromConfig(" | ||
- | orxObject_SetParent(pstObject, | ||
- | pstObject = orxObject_CreateFromConfig(" | ||
- | orxObject_SetParent(pstObject, | ||
- | </ | ||
- | |||
- | 这里,'' | ||
- | |||
- | 请注意当我们在代码中手动地创建和连接对象时,删除这些对象是我们的职责。 相反,'' | ||
- | |||
- | 然后,我们创建一个100Hz的时钟并将我们的'' | ||
- | |||
- | <code c> | ||
- | |||
- | orxClock_Register(pstClock, | ||
- | |||
- | Let's now have a look to our '' | ||
- | First, we make sure we can find the position in our world space that corresponds to our mouse cursor in the screen space.\\ | ||
- | We then copy our '' | ||
- | |||
- | 现在,让我们来看看我们的'' | ||
- | 首先,我们确保可以找到位于对应于鼠标指针的屏幕空间(screen space)的世界空间(world space)中的位置。\\ | ||
- | 然后复制'' | ||
- | |||
- | <code c> | ||
- | { | ||
- | orxVECTOR vParentPosition; | ||
- | orxObject_GetWorldPosition(pstParentObject, | ||
- | vPosition.fZ = vParentPosition.fZ; | ||
- | orxObject_SetPosition(pstParentObject, | ||
- | }</ | ||
- | |||
- | |||
- | 唯一剩下要做的就是根据输入去应用缩放和旋转了。\\ | ||
- | 在我们的例子中,我们在[[https:// | ||
- | |||
- | 让我们看看怎么处理它们。首先,处理旋转: | ||
- | |||
- | <code c> | ||
- | { | ||
- | orxObject_SetRotation(pstParentObject, | ||
- | } | ||
- | if(orxInput_IsActive(" | ||
- | { | ||
- | orxObject_SetRotation(pstParentObject, | ||
- | }</ | ||
- | |||
- | 现在,处理缩放: | ||
- | |||
- | <code c> | ||
- | { | ||
- | orxObject_SetScale(pstParentObject, | ||
- | } | ||
- | if(orxInput_IsActive(" | ||
- | { | ||
- | orxObject_SetScale(pstParentObject, | ||
- | }</ | ||
- | |||
- | 全部完成了! :-) 我们的'' | ||
- | |||
- | 注意: | ||
- | |||
- | * 我们可以使用配置值来替代旋转和缩放值的常量。这样,我们可以修改它们而不需要重新编译,甚至可以按下'' | ||
- | * 因为我们使用时钟的DT来实现旋转,它们将受益于时间上的一致((它们不会依赖于帧频,并且可以进行加速/ | ||
- | |||
- | ===== 资源 ===== | ||
- | |||
- | 源代码: [[https:// | ||
- | |||
- | 配置文件: | ||