我最近将我的游戏版本发送到 TestFlight 进行内部测试。 我的 friend 注意到他的 iPhone 6S Plus 上的拍摄控件无法正常工作。
控件如下
1) 屏幕左半边 = 跳跃
2) 屏幕右半边 = 射击
3) 滑动并按住屏幕的右半边 = 开始慢动作
现在,在我的 touches begin 方法中,我的拍摄有轻微的延迟,因此如果调用 touches moved,它会取消拍摄并开始慢动作。 这似乎是支持 3D Touch 的手机出现问题的原因。
进一步深入研究,我发现了这篇文章
iOS 9 Spritekit Double Tap Not Working on iPhone 6S
它基本上指出在支持 3D Touch 的设备上,touches moved 方法会自动调用。
On 3D Touch capable devices, touch pressure changes cause
touchesMoved:withEvent: to be called for all apps running on iOS
9.0. When running iOS 9.1, the method is called only for apps
linked with the iOS 9.0 (or later) SDK.
Apps should be prepared to receive touch move events with no
change in the x/y coordinates. "
这似乎解释了为什么我的 friend 有问题,如果总是调用 touches moved 它将取消拍摄并开始慢动作,即使他没有在屏幕上滑动也是如此。
所以我的问题是
1) 你能在 SpriteKit 游戏中禁用 3D Touch 吗?
2) 这是一个错误吗?
3) 还有其他方法可以使用在 3D Touch 设备上正确移动的触摸吗?
4) 或者,我可以使用手势识别器来模拟我当前在触摸移动中执行的滑动和保持功能。
感谢您的帮助
最佳答案
在尝试了各种其他无效的方法(包括 UISwipeGestureRecognizer 子类)之后,我终于弄明白了。
答案实际上就在我在我的问题中链接的同一个 stackOverflow 帖子中盯着我看
iOS 9 Spritekit Double Tap Not Working on iPhone 6S
解决方案是创建一个属性
var startingTouchLocation: CGPoint?
比在 touches Begin 中你设置那个属性
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
for touch in touches {
let location = touch.locationInNode(self)
/// Set starting touch. this is for 3d touch enabled devices, see touchesMoved method below
startingTouchLocation = location
....
}
}
然后在 touchesMoved 中添加一个检查以从该方法返回,直到触摸实际移动。
override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?) {
for touch in touches {
let location = touch.locationInNode(self)
/// WAY 1 - Check if touch moved because on 3d touch devices this method gets called on a force touch.
guard location != startingTouchLocation else { return }
// Your code
...
/// WAY 2 - Add a min distance for the finger to travel in any direction before calling touches moved code
let minValue: CGFloat = 30
guard let startingLocation = startingLocation else { return }
guard currentLocation.y < startingLocation.y - minValue ||
currentLocation.y > startingLocation.y + minValue ||
currentLocation.x < startingLocation.x - minValue ||
currentLocation.x > startingLocation.x + minValue else { return false }
// Your code
....
}
}
关于Swift SpriteKit 3D Touch 和触摸移动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36060423/
我的代码目前看起来像这样numbers=[1,2,3,4,5]defpop_threepop=[]3.times{pop有没有办法在一行中完成pop_three方法中的内容?我基本上想做类似numbers.slice(0,3)的事情,但要删除切片中的数组项。嗯...嗯,我想我刚刚意识到我可以试试slice! 最佳答案 是numbers.pop(3)或者numbers.shift(3)如果你想要另一边。 关于ruby-多次弹出/移动ruby数组,我们在StackOverflow上找到一
当我在我的Rails应用程序根目录中运行rakedoc:app时,API文档是使用/doc/README_FOR_APP作为主页生成的。我想向该文件添加.rdoc扩展名,以便它在GitHub上正确呈现。更好的是,我想将它移动到应用程序根目录(/README.rdoc)。有没有办法通过修改包含的rake/rdoctask任务在我的Rakefile中执行此操作?是否有某个地方可以查找可以修改的主页文件的名称?还是我必须编写一个新的Rake任务?额外的问题:Rails应用程序的两个单独文件/README和/doc/README_FOR_APP背后的逻辑是什么?为什么不只有一个?
我从Ubuntu服务器上的RVM转移到rbenv。当我使用RVM时,使用bundle没有问题。转移到rbenv后,我在Jenkins的执行shell中收到“找不到命令”错误。我内爆并删除了RVM,并从~/.bashrc'中删除了所有与RVM相关的行。使用后我仍然收到此错误:rvmimploderm~/.rvm-rfrm~/.rvmrcgeminstallbundlerecho'exportPATH="$HOME/.rbenv/bin:$PATH"'>>~/.bashrcecho'eval"$(rbenvinit-)"'>>~/.bashrc.~/.bashrcrbenvversions
我正在尝试使用Ruby中的SeleniumWebDriver2.4模拟鼠标移动如果我运行测试,是否应该看到鼠标在我的屏幕上移动?我很困惑。我试过很多不同的方法示例代码:require'selenium-webdriver'driver=Selenium::WebDriver.for:firefoxdriver.navigate.to'http://www.google.com'element=driver.find_element(:id,'gbqfba')那我试过了driver.action.move_to(element).performdriver.mouse.move_to(e
在控制台中,您可以像这样打印"\b"来删除光标左侧的字符(退格键)print"thelastcharisgoingtobeerased\b"#thelastcharisgoingtobeerased如何只向左移动一个位置而不是删除(向左箭头)? 最佳答案 这取决于终端类型和连接,但通常可以假定ANSI光标移动,因此光标向左是ESC+'['+'D':print"Thecursorshouldbebetweenthearrows:->参见http://ascii-table.com/ansi-escape-sequences.php获取
x={:name=>"John",:data=>{:physical=>{:age=>25,:weight=>150}}}我希望将数据的子属性向上移动一个级别(但不一定只是简单地展平所有属性)。在这种情况下,我基本上想将:physical属性“向上”移动一个级别。我正在尝试这个y=x[:data']y.each{|key|x[key]=y[key]}但是我得到...x=x.except(:data)=>{:name=>"John",[:physical,{:age=>25,:weight=>150}]=>nil}我在找...=>{:name=>"John",:physical=>{:a
我正在为我的网站使用MiddlemanBloggem,但默认情况下,博客文章似乎需要位于/source中,这在查看vim中的树时并不是特别好并尝试在其中找到其他文件之一(例如模板)。通过查看文档,我看不出是否有任何方法可以移动博客文章,以便将它们存储在其他地方,例如blog_articles文件夹或类似文件夹。这可能吗? 最佳答案 将以下内容放入您的config.rb文件中。activate:blogdo|blog|blog.permalink=":year-:month-:day-:title.html"blog.sources=
我的一个模型中有以下方法来保存用户记录:defsave_user(params)beginsave_user_details(params)rescueActiveRecord::RecordInvalid=>ex{success:false,errors:ex.messages}rescueException=>exRails.logger.info(ex.message)Rails.logger.info(ex.backtrace.join(‘\n’){success:false,errors:’Someerroroccurred.}endend我们可以看到rescueblock很
我知道有一个名为browser.window.move_to(0,0)的函数可以将浏览器移动到不同的位置,但OSX10.9对它来说是全新的。有什么方法可以将浏览器移动到另一个桌面吗?例如。在“桌面2”中触发命令的控制台,但我希望浏览器出现在“桌面1”中。非常感谢! 最佳答案 哈,在我尝试这个之前我正要说这可能是不可能的:browser.window.move_to(-1200,0)我的第二台显示器位于主屏幕的左侧。有效。好问题。您需要花点时间才能正确使用它,但watir似乎能够使用整个显示器Canvas。例如,如果您的显示器位于主屏
我正在使用适用于AmazonSNS的AmazonAWSRubySDK,但我在使用已注册的设备时遇到了一些问题。有时,当设备再次注册时,我会收到类似AWS::SNS::Errors::InvalidParameterInvalidparameter:TokenReason:Endpointarn:aws:sns:us-east-1:****alreadyexists这样的错误具有相同的Token,但具有不同的属性。。如何检查端点是否已存在,更重要的是,如何获取给定token的端点? 最佳答案 感谢BvdBijl的想法,我做了一个扩展方