我有以下代码来设置一个新的PhysicsBody:
select
(case
when register_user_type='E' then select * from employee where employee_id=register_user_id
else select * from customer where employee_id=register_user_id
end
)
from register_user
当用户触摸屏幕时,我正在尝试确定他们是否触摸了对象内部,左侧或右侧:
let size = CGSize(width: 100, height: 10)
let player = SKShapeNode(rectOf: size)
player.lineWidth = 1
player.physicsBody = SKPhysicsBody(rectangleOf: size)
player.physicsBody?.affectedByGravity = false
player.physicsBody?.isDynamic = true
调试语句和我的实验告诉我的是,播放器?.frame.width没有为对象返回正确的宽度。但是,更重要的是,即使物体离开,我似乎也会返回一个中心。对象正在移动,所以我怀疑问题是它返回了以前的位置。
所以,我有一个两部分问题:frame.width是确定宽度的正确方法,是否有一些东西在使用touchesBegan事件时可能导致这种明显的信息滞后?
答案 0 :(得分:2)
位置取决于anchorPoint,它通常是(0.5,0.5)或精灵的中心。
位置也是相对于父级的,所以你需要确保使用正确的坐标系,你最好的选择是touch.location(in:player)
来触及玩家的坐标系。
当你走了之后,当x为负时,你就知道它已经离开,当x为正时,你知道它是正确的。当-width / 2< x< width / 2,你知道你在节点内,其中0意味着你到了死点。