プロジェクトhttps://github.com/torchie/TrackKitでサブビューとして使用されているカスタム NSView サブクラスがあります。NSTouches を検出し、物理データを収集し、drawRect の詳細モード メソッドでそれらを描画します。一方、SpriteKit シーンは、レンダリングするものをレンダリングします。
ただし、組み込みのトラックパッドで指を動かすと、タッチが再び静止するまで、SpriteKit ビューでのすべてのレンダリングが一時停止します。Magic Trackpad では、フレームレートが低下しますが、レンダリングは完全に停止しません。どちらの場合も、サブビュー TKDetectorView は引き続きタッチ ポイントをレンダリングします。
問題の touchesMoved メソッド:
-(void)touchesMovedWithEvent:(NSEvent *)event {
for(NSTouch* touch in [event touchesMatchingPhase:NSTouchPhaseAny inView:self]) {
[touch_identities setObject:touch forKey:[touch identity]];
}
[self phys_record];
if(![self needsDisplay]) {
[self setNeedsDisplay:YES];
}
}
内蔵トラックパッド (#0) と Magic Trackpad (#1) を同時にタッチした詳細モード機能のブレークポイントからのデータ:
touch_identities __NSDictionaryM * 2 key/value pairs 0x0000608000055bd0
[0] (null) (no summary) : (no summary)
key NSConcreteValue * 0x600000054b80 0x0000600000054b80
value NSTouch * 0x6000000b2480 0x00006000000b2480
NSObject NSObject
_index NSInteger 10 10
_identity NSConcreteValue * 0x600000054b80 0x0000600000054b80
_phase NSTouchPhase 2 2
_normalizedPosition NSPoint (x=0.4923553466796875, y=0.4602508544921875)
x CGFloat 0.4923553466796875 0.4923553466796875
y CGFloat 0.4602508544921875 0.4602508544921875
_privateFlags NSInteger 0 0
_view TKDetectorView * 0x6000001ff900 0x00006000001ff900
_device NSObject * 0x600000013300 0x0000600000013300
_deviceSize NSSize (width=368.50393709999997, height=311.81102370000002)
previous_positions NSMutableArray * nil 0x0000000000000000
_isResting BOOL YES '\xad'
[1] (null) (no summary) : (no summary)
key NSConcreteValue * 0x60800005ea50 0x000060800005ea50
value NSTouch * 0x6080000b3740 0x00006080000b3740
NSObject NSObject
_index NSInteger 1 1
_identity NSConcreteValue * 0x60800005ea50 0x000060800005ea50
_phase NSTouchPhase 2 2
_normalizedPosition NSPoint (x=0.7928314208984375, y=0.3984222412109375)
_privateFlags NSInteger 0 0
_view TKDetectorView * 0x6000001ff900 0x00006000001ff900
_device NSObject * 0x600000014d70 0x0000600000014d70
_deviceSize NSSize (width=297.63779534999998, height=215.43307092000001)
previous_positions NSMutableArray * nil 0x0000000000000000
_isResting BOOL YES '\xad'
指が動いているときに位置の配列が絶えず変更されることによって、SpriteKit レンダリング スレッドが中断された結果である可能性があると思いましたが、それではなぜ MacBook Air の内蔵トラックパッドでのみ発生しているのか説明できません。外付けの Magic Trackpad ではありません。デバイス間の touchesMoved の解釈に関連する違いは見つかりませんでした。