Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >更流畅的雪碧-玩具对象的运动

更流畅的雪碧-玩具对象的运动
EN

Stack Overflow用户
提问于 2020-04-28 03:40:11
回答 1查看 145关注 0票数 0

我目前正在为Mac编写一个小小的乒乓球游戏,但我无法找到一种方法使桨运动平稳。我使用keyDown函数来检测某个键(例如W)何时被推送。这将执行一个run命令:

代码语言:javascript
运行
AI代码解释
复制
override func keyDown(with event: NSEvent) {
        if event.keyCode == 126 {
            pR.run(SKAction.move(by: CGVector(dx: 0, dy: 15), duration: 0))
        }
}

问题是,当我按下箭头向上键(keyCode 126)时,我的sprite/paddle (pR)移动了一次,如果我一直按住按钮,它就开始连续移动。

另外,如果我有两个if -指令(例如两个乒乓球运动员的一个),似乎不能同时输入两个输入,也就是说,两个玩家都不能按一个按钮并期望得到响应。

我如何解决这些问题?所有的帮助都是感激的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-28 09:05:13

问题1:为什么我的桨运动不平稳?

为什么要运行一个持续时间为0的移动SKAction?

这和改变它的y位置完全一样

你可以让持续时间延长到0.1

如果要这样做,每次单击W键时都应该删除p1的SKAction。为什么?您不希望它同时运行2 SKActions。(我假设pR是你的玩家1桨。我想是右边的意思吧。)

代码语言:javascript
运行
AI代码解释
复制
pR.removeAllActions()
pR.run(SKAction.move(by: CGVector(dx: 0, dy: 15), duration: 0.1))

或者,如果你希望它是即时的,你可以这样做,而不是

(尽管你的桨会移动得很快,取决于你的帧率)

代码语言:javascript
运行
AI代码解释
复制
pR.position.y += 15

我建议第一种选择。

或者,如果你喜欢第二种选择,因为它更干净,你可以替换15到10或5。

问题2:不能同时输入两个

·1:你不可能在“完全”同一时间点击2个按钮。

·2:这是什么意思?

·斯威夫特使用你按下的第一个键运行keyDown。

·斯威夫特然后用你按下的第二个键运行keyDown。

(即使你认为你同时按了两个键,你也没有按。一个键可能在第二个键之前按了一微秒。这都是时间的问题。这对于SpriteKit on iOS来说是一样的,您不能同时拥有两个“touchesBegan”输入。这是相当罕见的。

如何修复:

您应该能够添加第二个'if‘语句的另一个键为玩家2。

示例代码(除了使用开关以节省空间外)

代码语言:javascript
运行
AI代码解释
复制
override func keyDown(with event: NSEvent) {
        switch Int(event.keyCode) {

        // W Key
        case 13: // (Player 1 moves up)
        // S Key
        case 1: // (Player 1 moves down)

        // I Key
        case 34: // (Player 2 moves up)
        // K Key
        case 40: // (Player 2 moves down)

        // Someone clicked the wrong key
        default: return
        }
}

猜猜看!此代码^^几乎可以工作。我还没回答你的第三个问题。

问题3:桨移动一次,停止,然后开始连续移动

显然,这就是keyDown函数的工作方式。以下是我的建议:

*在按下键的变量中保持跟踪

·使用“keyUp”函数删除这些存储的值。

这是怎么回事?

代码语言:javascript
运行
AI代码解释
复制
var keysPressed: Set<Int> = []

override func keyDown(with event: NSEvent) {
        keysPressed.insert(event.keyCode)
}
override func keyUp(with event: NSEvent) {
        keysPressed.remove(event.keyCode)
}
override func update(_ currentTime: TimeInterval) {
        for i in keysPressed {
           // Put my Movement Switch Statement In Here
        }
}

我希望这能帮到你!如果您有任何问题,请随时回答。

Snap,我刚刚意识到这个问题在上面这个小小的评论部分得到了回答。哦,好吧。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61479342

复制
相关文章
我们为什么从 REST 转向 gRPC
服务间的通信方式是在采用微服务架构时需要做出一个最基本的决策。默认的选项是通过 HTTP 发送 JSON,也就是所谓的 REST API。我们也是从 REST 开始的,但最近我们决定改用 gRPC。
AI.NET 极客圈
2019/07/19
1.7K0
斗图会输?不存在的
可以看出,每一页的图片都在 div 标签里面,然后每一个 a 标签包含一个图片,
Dwyane
2018/12/07
8480
REST当中为什么要使用HTTP PUT
REST(Representational State Transfer)是网络服务接口的一种风格,并不是一个标准,就web service而言,REST要比SOAP(SOAP是标准,不是风格)轻量得多,容易得多。我记得我最初开始接触web service的时候,所有的材料上来就是一大堆的名词,SOAP, WSDL,看得头都要大了,后来提出来的REST就容易理解得多,虽然目前SOAP在企业级的web service中还有一席之地,但是在公共的Internet上,不是REST的服务实在不好意思和人打招呼,我们
张善友
2018/01/22
7770
为什么AngularJs会火?
Angular.js is a MV* (Model – View – Whatever) Javascript framework which is maintained by Google which excels in the creation of single-page-applications or even for adding some “magic” to our classic web applications.
javascript.shop
2019/09/04
9160
为什么@Conditional会失效?
一、背景描述二、常见条件注解失效场景三、聊一聊条件注解实现原理四、问题定位五、解决方案六、参考
叔牙
2023/08/09
6790
为什么@Conditional会失效?
使用iqtree软件利用基因存在缺失变异矩阵(0/1)矩阵构建进化树
线性泛基因组相关论文通常会获得基因存在缺失变异矩阵,接下来会使用这个矩阵构建进化树,今天的推文介绍一下使用iqtree软件利用基因存在缺失变异矩阵(0/1)矩阵构建进化树的代码
用户7010445
2024/02/03
3700
使用iqtree软件利用基因存在缺失变异矩阵(0/1)矩阵构建进化树
为什么有混合云的存在?
我们知道,云计算事实上已经成为企业基础架构上的主要形式,好不夸张的说,云计算就是当代企业的IT架构。
用户7426861
2021/08/24
9170
为什么 Google 会很强?
资本总是想榨干员工和机器的每一点剩余价值。如果那一天服务器有了意识,一定会揭竿起义。
LIYI
2022/11/18
6540
MySQL为什么会死锁?
死锁是指两个或者两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而导致的一种阻塞的现象,如果没有外力,他们将一直等待下去。
阿珍
2022/12/06
1.2K0
MySQL为什么会死锁?
为什么 demangle 会失败?
本周有位网友在交流群提到“为什么无法在自己的电脑中通过 c++filt 解析符号 _ZN5folly6detail15str_to_integralIxEENS_8ExpectedIT_NS_14ConversionCodeEEEPNS_5RangeIPKcEE ?”
酷酷的哀殿
2020/10/26
1.2K0
为什么 demangle 会失败?
为什么可逆矩阵又叫“非奇异矩阵(non-singular matrix)”?
最近在捡回之前的线性代数知识,在复习可逆矩阵的时候,发现有的书上把可逆矩阵又称为非奇异矩阵,乍一看名字完全不知所云,仔细一分析,还是不明白。要想弄明白,还是得从英文入手,下面的解释主要从这里得来的Wh
marsggbo
2018/12/19
2.4K0
为什么我使用 GraphQL 而放弃 REST API?
本文最初发布于 Max Desiatov 的个人博客,经原作者授权由 InfoQ 中文站翻译并分享。
winty
2021/05/19
2.4K0
为什么Cloud + DevOps会更好?
为了在优化成本的同时最大化云计算的优势,DevOps方法是最好的方法。在此博客文章中,我们解释了原因。
DevOps云学堂
2021/02/01
7120
Kafka 为什么会丢消息?
Kafka 是一个分布式的高可用、高性能消息队列,它可以用于大规模的数据处理和流式计算场景。在 Kafka 中丢失消息是一件非常不好的事情,因为这会导致数据的不连续性、计算结果的准确性下降等问题,从而影响到系统的功能和运行效率。下面我将从多个方面探讨 Kafka 为什么会丢失消息,并对其解决办法和优化策略进行简要描述。
用户1289394
2023/08/22
2320
Kafka 为什么会丢消息?
Spring事务为什么会失效?
如果对AOP的实现不太熟悉的话可以看我之前的文章,或者到我网站www.javashitang.com上查看系列文章
Java识堂
2022/05/19
5230
Spring事务为什么会失效?
删除namespace为什么会Terminating?
当我们删除集群中的某个namespace之后,有时候namespace并没有按照我们的期望正常删除,而是一直卡在Terminating状态。本文主要讨论下Terminating状态发生的可能性以及解决办法。
keke.
2021/03/16
10K0
Redis为什么会这么快?
Redis 属于键值(key-value)数据库,键值数据库会使用哈希表存储键值和数据,其中 key 作为唯一的标识,而且 key 和 value 可以是任何的内容,不论是简单的对象还是复杂的对象都可以存储。键值数据库的查询性能高,易于扩展。
MickyInvQ
2020/09/27
9090
Redis为什么会这么快?
为什么坐车会晕车呢
我是一个坐车经常晕车的人,特别是在车里看手机的时候,感觉很难受。今天正好看到了卓克老师对晕车的解读,我总结了几个关键点,分享给大家。先说结论,每个人都会晕车,就是程度不一样。不要在车上玩手机、看书。这些行为会加重你的不适感。最好的解决方式是上车就睡觉或者集中注意力听音频,光闭眼也无法避免晕车。另外就是豪车更容易晕。
石云升
2022/07/29
5330
为什么坐车会晕车呢
为什么这段代码会阻塞?
2. 这段代码开启了一个 goroutine,这个goroutine会向 in 通道中放入2000个 Content 对象,每个对象的 i 字段从0到1999。每放入一个对象都会记录日志。
腾讯云开发者
2024/09/10
3190
为什么这段代码会阻塞?
Double为什么会丢失精度
在工作中,谈到有小数点的加减乘除都会想到用BigDecimal来解决,但是有很多人对于double或者float为啥会丢失精度一脸茫然。还有BigDecimal是怎么解决的?话不多说,我们开始。
用户4283147
2022/10/08
2.4K0
Double为什么会丢失精度

相似问题

Python: While循环中的多个While循环

122

WHILE循环中的多个条件

30

while循环中的多个条件

22

While循环中的多个条件

11

while循环中的while循环

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档