我有一个用SpriteKit设计的游戏,它很大程度上依赖于1个SKShapeNode(这是一条线).我正在制作这样的一行:
if let path = createPathToMove() {
let shapeNode = SKShapeNode()
shapeNode.path = path
shapeNode.name = "line"
shapeNode.strokeColor = UIColor.blackColor()
shapeNode.lineWidth = 20
shapeNode.zPosition = 5
shapeNode.antialiased = false
shapeNode.lineCap = kCGLineCapRound
self.world!.addChild(shapeNode)
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,由于这被设计为一个调试功能(Sprite-kit绘图),它没有针对我正在做的事情进行优化,更大的问题是该行有伪影(因为它的线宽大于2).这些看起来像这样:http: //i.stack.imgur.com/ccQ1s.png
考虑到这一点,我已经推断使用Sprite-kit的SKShapeNode对我来说不是一个选项,除非有人知道如何解决上述问题.我已经研究了cocos2d,但是看起来有点矫枉过正(使用整个lib只是一个CCDrawNode).是否有SKShapeNode(和swift)的开源/公共扩展,这改善了绘图功能?要修复的最重要的是工件(节点中的白点/线).如果没有任何公开,Cocos2d是我的最佳选择吗?
我正在使用 Laravel Cashier 和 Stripe 开发 Web 应用程序的订阅。
我正在使用 Stripe v3 JavaScript API 并使用卡片元素生成 Stripe 令牌。Stripe 令牌正在生成,如果您在 Stripe 仪表板中查看,则会创建一个客户。此外,条带 ID 还保存在用户数据库中。但是,当我尝试使用以下代码为用户订阅计划时:
$user->newSubscription($planId, $planId)->create($stripeToken, [
'email' => $user->email
]);
Run Code Online (Sandbox Code Playgroud)
它失败并显示错误:“没有这样的客户:cus_xxxxxx”。$planId 变量是 Stripe 中计划的 ID。
正如我所说,条带令牌已正确生成,客户已在 Stripe 仪表板中创建,并且条带 ID 已在数据库中设置。我对 Laravel Cashier 代码进行了一些深入研究,当它尝试更新卡信息时似乎出现了错误。更具体地说,它在此功能上失败:
public function asStripeCustomer()
Run Code Online (Sandbox Code Playgroud)
这是在计费模型中找到的。
我联系了 Stripe 支持人员,他们说在创建初始客户后,不会再向他们的 API 发出进一步的请求。
我的 laravel 版本是 5.5.34,我使用的是最新的 Cashier 版本。我已经尝试重新安装 Cashier,但仍然无法正常工作。我还刷新了我的缓存。
任何帮助是极大的赞赏。
我在 SKScene 中有一个节点,我根据用户的触摸来移动它。基本上,这个角色还应该尝试跟随用户的手指(假设手指在屏幕上)。我目前已经这样实现了,效果很好:
override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
let touch = touches.first as! UITouch
player.runAction(SKAction.moveTo(touch.locationInNode(self), duration: 1))
}
override func touchesMoved(touches: Set<NSObject>, withEvent event: UIEvent) {
let touch = touches.first as! UITouch
player.runAction(SKAction.moveTo(touch.locationInNode(self), duration: 1))
}
override func touchesCancelled(touches: Set<NSObject>!, withEvent event: UIEvent!) {
player.removeAllActions()
}
override func touchesEnded(touches: Set<NSObject>, withEvent event: UIEvent) {
player.removeAllActions()
}
Run Code Online (Sandbox Code Playgroud)
然而,问题是如果用户将手指放在手机上。TouchesBegan 仅被调用一次,即点击开始时,而不是按住时。我希望玩家角色不断地尝试到达手指。
我将相机集中在节点上,因此节点应该触摸手指的唯一时间是用户将手指放在节点上/节点内(即与节点相同的位置)。因此,在我运行 SKAction 来移动节点后,触摸无效,因为它位于旧位置。
我该怎么做?