我正在使用Sprite
Kit制作游戏,并且当您按住向左/向右移动按钮时,我希望角色在屏幕上移动。问题在于他仅在轻按按钮时才移动,而没有保持住。我到处都在寻找解决方案,但似乎无济于事!
这是我的代码;
class Button: SKNode
{
var defaultButton: SKSpriteNode // defualt state
var activeButton: SKSpriteNode // active state
var timer = Timer()
var action: () -> Void
//default constructor
init(defaultButtonImage: String, activeButtonImage: String, buttonAction: @escaping () -> Void )
{
//get the images for both button states
defaultButton = SKSpriteNode(imageNamed: defaultButtonImage)
activeButton = SKSpriteNode(imageNamed: activeButtonImage)
//hide it while not in use
activeButton.isHidden = true
action = buttonAction
super.init()
isUserInteractionEnabled = true
addChild(defaultButton)
addChild(activeButton)
}
//When user touches button
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?)
{
action()
//using timer to repeatedly call action, doesnt seem to work...
self.timer = Timer.scheduledTimer(timeInterval: 0.1, target: self, selector: #selector(getter: Button.action), userInfo: nil, repeats: true)
//swtich the image of our button
activeButton.isHidden = false
defaultButton.isHidden = true
}
code..........
在我的游戏场景中…
// *** RIGHT MOVEMENT ***
let rightMovementbutton = Button(defaultButtonImage: "arrow", activeButtonImage: "arrowActive", buttonAction:
{
let moveAction = SKAction.moveBy(x: 15, y: 0, duration: 0.1)
self.player.run(moveAction)
})
您知道什么时候触摸了按钮,因为它touchesBegan
被调用了。然后,您必须设置一个标志以指示按钮被按下。
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
let touch = touches.first!
if leftButton.containsPoint(touch.locationInNode(self)) {
leftButtonIsPressed = true
}
if rightButton.containsPoint(touch.locationInNode(self)) {
rightButtonIsPressed = true
}
}
在中update()
,调用标记为true的函数:
update() {
if leftButtonIsPressed == true {
moveLeft()
}
if rightButtonIsPressed == true {
moveRight()
}
}
您可以在touchesEnded
调用该按钮时将标志设置为false :
override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) {
let touch = touches.first!
if leftButton.containsPoint(touch.locationInNode(self)) {
leftButtonIsPressed = false
}
if rightButton.containsPoint(touch.locationInNode(self)) {
rightButtonIsPressed = flase
}
}
编辑:
正如KoD所指出的那样,一种更干净的方法(用于移动按钮)SKAction
可以消除对标志的需要:
SKActions
为moveTo x:0
和moveTo x:frame.width
在 didMoveTo(View:)
touchesBegan
,在指定SKAction密钥的正确对象上运行正确的SKAction。touchesEnded
,删除相关的SKAction。您必须做一些数学运算来计算对象必须移动多少点,然后根据该距离和移动速度(以每秒点数为单位)设置SKAction的持续时间。
或者,(由于KnightOfDragons的帮助)创建了一个SKAction.MoveBy x:
以较小的距离(基于您所需的移动速度)并且持续时间为1/60
秒的。SKAction.repeatForever
触摸按钮时,请永久重复此操作(),并在释放按钮时删除重复的SKAction。
我在@Click上调用了3个函数,我是这样做的: 首先调用getBillPrice(),然后调用updateBill(),然后调用postData(),这一点很重要。但是这些函数的运行顺序是错误的,首先是updateBillPrice,然后是postData(),然后是getBillPrice() 我该如何修复它?以下是我的一些功能。这是文本可以发布这么多代码,您可以直接跳过此文本:Lorem i
Im在配置PrometheusMeterRegistry以从Geode集群获取度量时遇到问题。配置完endpoint之后,如果我运行curl命令来检查所配置的endpoint上的度量是否可用,http请求处理程序将卡在刮取函数上: 如您所见,此代码主要与https://micrometer.io/docs/registry/Prometheus中配置Prometheus注册表的示例相同 但是如果我
问题内容: 是否有一种简短的方法可以在Python中连续两次或更多次调用函数?例如: 也许像: 问题答案: 我会: 的是其值为你不关心的变量约定。 您可能还会看到有人写: 但是,这样做会稍微贵一些,因为它会创建一个包含每次调用(即使是)的返回值的列表,然后将结果列表丢弃。我不建议使用,除非你 正在 使用的返回值的列表。
问题内容: 我正在尝试编写Django应用程序,而我却被困在单击按钮时如何调用视图函数。 在我的模板中,我有一个如下所示的链接按钮,单击该按钮会将您带到另一个网页: 单击按钮时,我还想调用Django视图函数(以及重定向到目标网站)。查看功能使数据库中的值增加,该值存储了单击按钮的次数。 该是到外部网站(如链接 www.google.com )。现在,单击该按钮时,它将打开一个新窗口,该窗口将您带
问题内容: HTML: 脚本: 请告诉我在调用方法时如何使用模板值? 问题答案: 从指令调用函数时,传递范围变量值而不插入值()。
问题内容: 我创建了一个名为functioncalling.php的页面,其中包含两个按钮 Submit 和 Insert 。作为PHP的初学者,我想测试单击按钮时执行的功能。我希望输出出现在同一页面上。因此,我创建了两个功能,每个按钮一个。functioncalling.php的源代码如下: 这里的问题是单击任何按钮后都没有输出。 我到底哪里出问题了? 问题答案: 是的,您在这里需要Ajax。请