您好我需要您的帮助我现在已经找了一段时间找到答案。
我也简化了代码,以摆脱你不需要知道的所有信息/垃圾。
我使用SpriteKit和Swift进行IOS游戏的主菜单场景。有一个主菜单播放按钮。我想要的是当按下按钮时按钮会变大一点。当我的手指松开时,按钮变小。使用override func touchesBegan / touchesEnded可以正常工作。我的问题是当我的手指被拖离按钮喜欢取消。该按钮不会恢复原始大小。我很确定我需要使用
override func touchesCancelled(touches: Set<UITouch>?, withEvent event: UIEvent?) {}
但是经过多次尝试,当我的手指被拖出按钮时,我无法获得将按钮恢复到原始尺寸的预期效果。谢谢你的帮助。
import Foundation
import SpriteKit
import UIKit
class StartScene: SKScene {
var playButton: SKNode! = nill
override func didMoveToView(view: SKView) {
// Create PlayButton image
playButton = SKSpriteNode(imageNamed: "playButtonStatic")
// location of Button
playButton.position = CGPoint(x:CGRectGetMidX(self.frame), y:520);
self.addChild(playButton)
playButton.setScale(0.5)
}
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
for touch: AnyObject in touches {
let location = touch.locationInNode(self)
if playButton.containsPoint(location) {
playButton.setScale(0.6)}}}
override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) {
for touch: AnyObject in touches {
let location = touch.locationInNode(self)
if playButton.containsPoint(location) {
playButton.setScale(0.5)
}}}
// Problem Area
override func touchesCancelled(touches: Set<UITouch>?, withEvent event: UIEvent?) {
for touch: AnyObject in touches! {
let location = touch.locationInNode(self)
if playButton.containsPoint(location) {
playButton.setScale(0.5)
}}}
}
感谢您的回复
答案 0 :(得分:1)
发现解决方案在TouchesEnded中使用Else语句
override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) {
for touch: AnyObject in touches {
let location = touch.locationInNode(self)
if playButton.containsPoint(location) {
playButton.setScale(0.5)
}
else
{
playButton.setScale(0.5)
}}
答案 1 :(得分:1)
您说您找到了解决方案,但这是一个更简单的解决方案:使用我专门为SpriteKit按钮设计的自定义类。 Link to the GitHub that has the class file.通过本课程,您根本不必担心它,它会从您的触摸功能中删除不必要的代码。 JKButtonNodes有3种状态:正常,突出显示和禁用。如果你从父母那里删除它,你也不必担心将它设置为零。
要声明变量,请执行此操作。暂时忽略playButtonAction错误。
var playButton = JKButtonNode(background: SKTexture(imageNamed: "playButtonStatic"), action: playButtonAction)
该动作是按下按钮时松开的功能。在班上的任何地方创建这样的函数。
func playButtonAction(button: JKButtonNode) {
//Whatever the button does when pressed goes here
}
然后你可以在didMoveToView中设置它的属性。
playButton.position = CGPoint(x:CGRectGetMidX(self.frame), y:520)
//These are the 3 images you want to be used when pressed/disabled
//You can create a bigger image for when pressed as you want.
playButton.setBackgroundsForState(normal: "playButtonStatic", highlighted: "playButtonHighlighted", disabled: "")
addChild(playButton)
那就是它!如果用户将手指移开,JKButtonNode类本身已经取消了触摸,除非用户成功按下按钮并将手指放在其上,否则它也不会调用该函数。您还可以执行其他操作,例如禁用播放声音等。
使用JKButtonNode的优秀专家是,您不必再在整个地方拥有代码,因为它不需要触摸功能中的任何代码。