Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Swift TouchesBegined会导致Xcode崩溃,同时仍在touchesEnded中执行功能_Ios_Xcode_Swift_Crash_Touchesbegan - Fatal编程技术网

Ios Swift TouchesBegined会导致Xcode崩溃,同时仍在touchesEnded中执行功能

Ios Swift TouchesBegined会导致Xcode崩溃,同时仍在touchesEnded中执行功能,ios,xcode,swift,crash,touchesbegan,Ios,Xcode,Swift,Crash,Touchesbegan,我是编程新手,所以我相信这是一个简单的解决方案。但是,我有它,所以当我触摸一个特定的精灵节点时,它会添加一个球和目标。一旦我松开手指,它就会把球传给目标。但是,如果我在第一个球完成之前尝试发送另一个球,Xcode就会崩溃 请帮忙 ERROR=reason:'试图添加已具有父节点的SKNode: 代码: // 覆盖func TOUCESBERTED(触摸:NSSet,withEvent事件:UIEvent){ 让touch=touch.anyObject()作为UITouch 让touchLoca

我是编程新手,所以我相信这是一个简单的解决方案。但是,我有它,所以当我触摸一个特定的精灵节点时,它会添加一个球和目标。一旦我松开手指,它就会把球传给目标。但是,如果我在第一个球完成之前尝试发送另一个球,Xcode就会崩溃

请帮忙

ERROR=reason:'试图添加已具有父节点的SKNode:

代码:

//
覆盖func TOUCESBERTED(触摸:NSSet,withEvent事件:UIEvent){
让touch=touch.anyObject()作为UITouch
让touchLocation=touch.locationInNode(自身)
如果self.nodeAtPoint(触摸位置)=self.slingshot{
addBall()
addTarget()
isFingerTouching=true
}
}
覆盖功能触摸移动(触摸:NSSet,withEvent事件:UIEvent){
/*更新到新的触摸位置*/
如果我用手指触摸{
var touch=touch.anyObject()作为UITouch!
var touchLocation=touch.locationInNode(自)
var previousLocation=触摸。previousLocationInNode(自身)
var slingholderY=slingholder.position.y+(touchLocation.y-previousLocation.y)
var slingholderX=slingholder.position.x+(touchLocation.x-previousLocation.x)
slingholderY=min(slingholderY,155)
slingholderY=最大值(slingholderY,89)
slingholderX=min(slingholderX,CGRectGetMidX(自帧)+40)
slingholderX=最大值(slingholderX,CGRectGetMidX(自帧)-40)
slingholder.position=CGPointMake(slingholderX,slingholderY)
leftsling.yScale=(155/滑动支架位置y)*0.6
leftsling.xScale=(slingholder.position.x/383)*0.6
rightsling.yScale=(155/滑动支架位置y)*0.6
rightsling.xScale=(383/slingholder.position.x)*0.6
slingholder.yScale=(89/slingholder.position.y)
slingholder.xScale=(89/slingholder.position.y)
ball.yScale=2*(89/滑动支架位置y)
ball.xScale=2*(89/滑动支架位置y)
ball.position=滑动支架.position
slingholder.zRotation=0.3*((slingholder.position.x-383)/40)
目标位置x=768-(9.57*(滑动支架位置x-343))
目标位置y=最大值(10300)
target.position.y=(self.frame.size.height-self.scoreboard.size.height-300)+(9.85*(89-slingholder.position.y)+150)
}
}
覆盖func touchesEnded(触摸:NSSet,withEvent事件:UIEvent){
sendBall()
isFingerTouching=false
}
//检查鸟是否到达右侧或左侧
func checkIfBirdReachesOtherSide(){
为孩子在自我{
if(子.position.x>self.frame.width+20){
self.removeChildrenarray([child])
}
if(子位置x<-20){
self.removeChildrenarray([child])
}
}
}
func addBall(){
ball.position=CGPointMake(CGRectGetMidX(self.frame),155)
ball.xScale=1.0
ball.yScale=1.0
ball.zPosition=4
self.addChild(ball)
}
func addTarget(){
target.position=CGPoint(x:CGRectGetMidX(self.frame),y:slingholder.position.y+200)
target.zPosition=4
self.addChild(目标)
}
func sendBall(){
让moveToTarget=SKAction.moveTo(CGPointMake(target.position.x,target.position.y),持续时间:0.5)
设scaleBallUp=SKAction.scaleBy(1.0,持续时间:0.2)
让scaleBallDown=SKAction.scaleBy(0.3,持续时间:0.3)
让延迟=SKAction.waitForDuration(2)
让remove=SKAction.removeFromParent()
让sequence=SKAction.sequence([scaleBallUp、scaleBallDown、remove])
让ballGroupAction=SKAction.group([moveToTarget,sequence])
ball.runAction(ballGroupAction)
target.runAction(删除)
让moveSlingholder=SKAction.moveTo(CGPointMake(CGRectGetMidX(self.frame),155),持续时间:1,延迟:0,使用带阻尼的弹簧:0.1,初始弹簧速度:10.0)
设scaleSling=SKAction.scaleXTo(0.6,y:0.6,持续时间:1,延迟:0,使用带阻尼的弹簧:0.1,初始弹簧速度:10.0)
设scaleSlingHolder=SKAction.scaleXTo(0.6,y:0.6,持续时间:1,延迟:0.2,使用带阻尼的弹簧:0.1,初始弹簧速度:10.0)
让rotateSlingholder=SKAction.rotateToAngle(0,持续时间:1,延迟:0,使用带阻尼的弹簧:0.1,初始弹簧速度:10.0)
让slingHolderBundledMovement=SKAction.group([moveSlingholder,rotateSlingholder,scaleSlingHolder])
slingholder.runAction(slingHolderBundledMovement)
leftsling.runAction(缩放)
rightsling.runAction(缩放)
}
}
//

您的问题在于
addTarget
addBall
方法

您只能将SKNode添加到一个父节点。每次触摸屏幕时,你都会添加相同的目标和相同的球。因此,你应该只添加一次球和目标,每次更新位置

因此,您可以在
didMoveToView
方法中添加两个节点:

addChild(ball)
addChild(target)

并且只更新方法中的位置等,而不在每次调用该方法时再次添加它

不客气。你能接受我的回答吗?这样别人会觉得更容易?
addChild(ball)
addChild(target)