
物理学
|
243
讨论
当人们开始思考如何解决这个问题的时候,下意识的会这样以为:“在触摸开始时,
获取当前触摸点的对象。然后在手指移动时,修改它的
position
属性,这不就是
拖动了吗?”
这会导致一些潜在的问题发生。首先,如果你仅仅是在用户拖动时在触摸更新通知
方法中修改这个对象的位置,由于重力的存在,这个物体将不断往向下坠。这回使
物体在移动的时候位置抖动得比较厉害。
其次,如果你直接设置物体的位置,就有可能让物体直接穿过墙或者其他物体,那
可不是你想要的结果。
更好的解决方案是,就像我们在上面的答案中所演示的,创建一个静态的,“隐形”
的物体,然后将它和你真正向拖动的物体相连接。当触摸开始,我们改变静态物体
的位置,而不是修改想拖动的物体的位置,这样,由于连接的存在,物体本身也会
随静态物体而移动。因为我们没有改变物理系统,对象在被拖动的同时并不会违反
物理规则,比如与其他物体贯穿。另外,由于使用
pin
连接,被拖动的物体在移动
时会有轻微晃动,看起来更加真实。
注意
touchesEnded
和
touchesCancelled
方法,即在触摸结束和取消时,都调用了
一个
stopDragging
方法,在用户拖动的过程中,是可以取消拖动的(比如有恰巧
有一个手势识别器识别了这个触摸)。在这种情况下,我们实际上可以把它看作是
用户已经抬起了手指。
7.19
创建车辆
问题
我们想创建一辆带轮子的车辆。
解决方案
车辆至少由两部分构成:车厢和轮子(
1
个或多个)。在本例中,一辆小车