SpriteKit:精灵在已设置的物理主体下相互移动

2024-01-07

因此,我创建了一个基于图块移动的玩家,并在地图周围创建了一堵墙,以将玩家保持在操场上。两者都有一个物理主体。我的猜测是,我的玩家移动不正确,因此玩家会撞到墙上。让我向你展示我的代码:

这就是玩家的物理主体:

self.physicsBody!.usesPreciseCollisionDetection = true
self.physicsBody!.categoryBitMask = PhysicsCategory.Player
self.physicsBody!.contactTestBitMask = PhysicsCategory.House
self.physicsBody!.collisionBitMask = PhysicsCategory.Wall

这是墙体的物理结构:

self.physicsBody!.usesPreciseCollisionDetection = true
self.physicsBody!.categoryBitMask = PhysicsCategory.Wall
self.physicsBody!.contactTestBitMask = 0
self.physicsBody!.collisionBitMask = PhysicsCategory.Player
self.physicsBody!.isDynamic = false

它们都继承自 Objects 类:

self.physicsBody = SKPhysicsBody(rectangleOf: size)
self.physicsBody!.affectedByGravity = false
self.name = name

所以,如果这是原因的话,让我给你我的玩家移动代码:

func move(direction: String, width: CGFloat){
    //Choosing the direction based of the users touch
    switch direction{
        case "South":
        //Decreasing the position of the player by 1 Tile
        pos.y -= width

        //Flipping the picture the right way to make the player look in the right direction
        yScale = 1.0

        //Rotates the picture
        let rotateAction = SKAction.rotate(toAngle: -1.57, duration: 0.0)
        run(rotateAction)

       //All the other directions just change the x and y value of pos corresponding to the direction
    }

    //Moves the player to the calculated position
    let moveAction =  SKAction.move(to: pos, duration: 0.0)
    run(moveAction){
        //Sound
    }

Edit:

的价值观PhysicsCategory.Player and PhysicsCategory.Wall

struct PhysicsCategory{
   static let Wall:UInt32 = 0x1 << 0
   static let Player:UInt32 = 0x1 << 1
   static let House:UInt32 = 0x1 << 2
}

Edit 2:

主要问题是如何与 SKAction 正常工作发生碰撞


除了“精灵正在相互移动......”和“所以玩家进入墙壁”之外,您实际上还没有描述您的问题

要验证您的所有接触和碰撞,请查看我的回答:iOS SpriteKit - 碰撞和接触未按预期工作 https://stackoverflow.com/questions/36570859/ios-spritekit-collisions-and-contacts-not-working-as-expected/36574240?noredirect=1#comment66724678_36574240并尝试实现 checkPhysics() 函数,并在您认为已经设置了所有物理体及其交互后调用它。

您确定:

  • 玩家和墙实际上有物理体吗?
  • 场景是一个SKPhysicsContactDelegate
  • 您已设置physicsWorld.contactDelegate = self
  • You have implemented one of the optional methods of SKPhysicsContactDelegate:
    • 开始联系
    • 结束联系

它是否正确:

  • 你想让玩家撞到墙吗?
  • 你想让墙与玩家碰撞吗?
  • 当玩家 和房子的感觉?
  • 如果墙壁接触到任何东西,您不想收到通知吗?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SpriteKit:精灵在已设置的物理主体下相互移动 的相关文章

  • 如何右对齐 UILabel?

    Remark 实施 myLabel textAlignment right does not解决了我的问题 这不是我所要求的 我想要实现的是让标签对齐右对齐 为了更清楚地说明 这就是如何left对齐外观 就是这样justify对齐外观 if
  • 可以获取位置,但无法获取航向

    我目前只使用模拟器 但我在 iOS 模拟器上快速使用 CoreLocation 时遇到问题 我得到此代码打印的位置更新 但从未得到标题 我不想当然 我正在尝试制作一个指南针类型的应用程序 它将显示目标的方位 class CompassVie
  • iOS 电池监控 Swift

    我已将监控设置为启用 但模拟器和设备中的电池电量仍然为 1 UIDevice currentDevice batteryMonitoringEnabled true var level UIDevice currentDevice batt
  • 设置/覆盖 UICollectionView 中单元格之间的填充

    我有一个 UICollectionView 但在获取单元格之间的填充时遇到了问题 理论上 我应该能够将屏幕除以 4 并且我可以获得包含 4 个图像的单元格大小 完美地占据屏幕宽度 但是 它选择不这样做 相反 它会创建 3 个具有巨大填充的图
  • 如何使用完成处理程序等待 firestore 请求的完成

    我正在慢慢地了解完成处理程序 如果我有一个 firestore 查询 如果我想使用完成处理程序 则有点向后工作 当 firestore 查询完成时 我必须使用completion 但它的设置功能仍然让我感到困惑 因此 如果这是一个将闭包作为
  • 检测 AVAudioPlayer 中的播放结束

    我有几个短的 mp3 声音 我将它们存储在数组中 并希望连续播放它们 有什么方法可以检测 AVAudioPlayer 何时停止播放 以便我可以调用完成处理程序并播放下一个声音 我知道有一个委托 但我正在使用 Playground 和 SKS
  • 我的游戏中应该有多少个视图控制器?

    我开始使用 spritekit 构建我的第一个游戏 现在我只有一个视图控制器来呈现开始屏幕场景 override func viewDidLoad super viewDidLoad let scene StartScreenScene C
  • 致命错误:在字典中发现“地理编码地标”类型的重复键。 (Mapbox 地理编码器)

    我引用 这通常意味着要么该类型违反了 Hashable 的要求 要么此类字典的成员在插入后发生了变化 我正在使用 Mapbox Geocoder 当发生此运行时错误时 我的 XCode 将我带到线程 1 0 swift runtime on
  • 为什么我的视图仍然以横向呈现?

    我的视图是由导航控制器控制的 因此我将导航控制器支持的方向设置为明确的纵向和纵向UpSideDown 这可以工作 但是如果调用视图时前一个视图处于横向状态 它将以横向方式呈现并保持横向状态 直到设备旋转 如何防止这种情况发生 这是我的代码
  • Swift C 回调 - Swift 类指针的 takeUnretainedValue 或 takeRetainedValue

    我有一些UIView or UITableViewCell 里面我有 C 回调 例如 CCallback bridge self observer data gt Void in let mySelf Unmanaged
  • CGPoint 标量乘法 Swift

    我正在 SpriteKit 中构建一个平台游戏 并将为我的实体实现更新功能 以便它们根据重力和速度移动 但是 我需要使添加的速度量与增量时间成比例 以防止帧速率影响我的实体的移动方式 因此我将导入 GLKit 以便我可以使用标量函数 但是
  • iOS 13 beta 外部屏幕上的 OverscanCompensation

    我正在测试一个应用程序的测试版 但遇到了外部屏幕的问题 我们看到应用程序周围有黑色边框 我们之前可以通过设置来纠正它overscanCompensation to none但在 iOS 13 中 该设置根本没有任何效果 我们曾经看到一个错误
  • 列表不符合 Encodable

    因此 我正在使用领域 并且两个模型之间有以下关系 A unit has many tests Unit model class Unit Object Decodable objc dynamic var id String let tes
  • 如何快速更改按钮图像?

    我正在开发一个有按钮的应用程序 该按钮没有文本 图像或背景 所以我想做的就是在viewDidLoad函数中给它一个图像 这就是我所拥有的 IBOutlet var tapButton UIButton override func viewD
  • iOS UIButton 带有圆角和背景 bug

    我发现圆形 UIButton 存在一个奇怪的问题 这是我创建此按钮的代码块 let roundedButton UIButton type System roundedButton frame CGRectMake 100 100 100
  • Swift 3.0 Pin 颜色注释在 MapView 中没有改变

    我有兴趣根据案例场景更改注释的图钉颜色 在一个函数中 我发送了一个数组 用于确定引脚注释的颜色 到目前为止 我已经设置了一个名为 ColorPointAnnotation 的子类 它将确定 pinColor 然后 在 switch 语句中
  • 为什么我的 tableView 函数运行了 3 次?

    我有一个 UITableView 并且有执行它所需的方法之一 func tableView tableView UITableView numberOfRowsInSection section Int gt Int println sec
  • SpriteKitPhysicsBody非矩形碰撞

    pipeUp physicsBody SKPhysicsBody rectangleOfSize pipeUp size 在此编码中我使用了rectangleOfSize对于碰撞物理体 但如果我想按像素仅使用图像的形状 我应该使用什么而不是
  • Xcode 9 中的“addingPercentEncoding”是否损坏?

    在 Swift 3 x 和 Xcode 9 beta 2 中 使用addingPercentEncoding https developer apple com documentation swift string 1690785 addi
  • 在 UIView 中实现自定义 StaggereGrid,就像 SWIFT 中的 Etsy 应用程序一样

    我想实现一个像 Etsy 应用程序一样的 StaggeredGrid 但我对此一无所知 你能给我一些建议吗 这是我需要做的事情的屏幕截图 None

随机推荐

  • 将div的内容保存到本地存储,并显示在另一个页面上

    我正在尝试获取 a 的内容 div 在页面加载的页面上 并将其保存到本地存储 当有人再次访问主页时 我想要这个内容div要显示 虽然我可以让函数与表单输入字段和提交一起使用 但我找不到仅使用内容和页面加载来使其工作的方法 任何帮助表示赞赏
  • 在 Pandas 中使散点图的标签垂直和水平

    我在用着Pandas绘制散点图矩阵 from pandas tools plotting import scatter matrix 问题是列中的名称DataFrame太长了 我需要它们在 x 轴上垂直 在 y 轴上水平 这样它们才能适合
  • Putty 谷歌云计算

    我对谷歌云和腻子很陌生 我的问题是当我在计算机上打开 putty 并在 putty 中输入外部 IP 时 我的屏幕打开并要求我登录 我的问题是我要输入什么才能登录 这是谷歌用户名帐户吗 更好的问题是我在哪里可以找到登录虚拟机所需的登录名和密
  • 如何将日期时间格式化为数据表中的特定日期格式

    在我的 datagridview1 中 日期列显示格式 MM dd yyyy hh mm ss 然后我使用这段代码 我使用一个函数来填充这样的 datagridview public void load table DataTable lt
  • 在 Redis 中使用嵌套对象?

    假设我有一个嵌套属性可以更改的哈希值 key1 prop1 subprop1 could change 如果我收到以下信息prop1 subprop1已更改 我可以对此属性执行原子更新吗 现在node redis saves prop1作为
  • 使用 Roslyn 拆分表达式语句

    我正在开发一个可以改写的应用程序CSharp代码 我正在这样做Roslyn 我面临着一个问题splitting expressions 样板课 class Program static void Main string args float
  • 如何自定义 git rebase --interactive 提交消息的格式?

    我使用 git 进行本地工作 并且非常喜欢它 并且遵循类似于中描述的工作流程本文 http reinh com blog 2009 03 02 a git workflow for agile teams html 所以基本上 当开始一个新
  • 分形编程[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 获取所有系统壁纸

    有没有办法以编程方式获取所有android系统壁纸 我知道如何通过WallpaperManager 然后将其保存到磁盘 但我想知道是否有一种方法可以访问操作系统中包含的所有用作系统壁纸的图片 所有壁纸都位于启动器应用程序中 由于启动器的名称
  • 如何在 Vue Web 组件中使用 vue-i18n?

    我正在使用 vue cli 3 创建一个 Vue Web 组件 target wc选项 我还需要该组件来使用 vue i18n 插件 这需要将一些选项传递给主 Vue 实例 如下所示 new Vue i18n new VueI18n 在常规
  • 无法启动组件 [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/JDBC_DBO]]

    我收到此 Tomcat 错误 Sep 09 2012 4 16 54 PM org apache catalina core AprLifecycleListener init Information The APR based Apach
  • 如何创建脚本来查询 Google 浏览器位置

    我正在尝试找出一种从 Google 浏览器位置 API 获取地理位置数据的方法 我发现JSON CURL 和 Google 的地理定位 https stackoverflow com questions 13433901 json curl
  • iOS 8 上弹出窗口中的 UIDatePicker 问题

    还有其他人在 iOS 8 上的弹出窗口中遇到 UIDatePickers 问题吗 突然我们的日期选择器无法正确显示 参见屏幕截图 似乎选择器的一部分没有显示 不过 您仍然可以与缺失的部分交互来更改时间 我做了一些测试 日期选择器在其他视图中
  • 在draw_networkx可视化中突出显示节点而不更改节点颜色

    我正在使用 NetworkX 来可视化包含超过 1000 个节点的大型图 作为可视化的一部分 我希望能够突出显示某些节点 我见过这个问题 https stackoverflow com questions 27030473 how to s
  • 控制台上的 gcc 编译输出消息中出现奇怪的字符

    当我使用 gcc 构建 C 代码时 在 Ubuntu 10 04 x32 位系统上的 bash shell 下生成如下 Makefile gcc 输出消息在输出消息中包含一些不需要的字符 见下文 test dualboot desktop
  • 如何以编程方式添加安全区域

    当你打开视图时 它将如下图所示 iPhone x 打开视图 https i stack imgur com GJ8uy png iPhone 8 打开视图 https i stack imgur com Y1T74 png 对于 iphon
  • next-i18next 使用 Link 和 jest 进行单元测试错误“无法读取未定义的属性语言”

    next i18next使用它自己的Link组件与区域设置子路径兼容 https github com isaachinman next i18next https github com isaachinman next i18next 当
  • 如何将 Stream 转换为对象

    如何将流转换为对象 我有一个WebApi HttpGet public AttachmentViewModel DownloadAttachementDetailsByIds int attachementDetaisId Attachme
  • 如何在自定义 UIView 上显示 CGPoints

    我有一个小项目 它代表一个带有报告的应用程序 用户可以在其中绘制自定义报告CanvasView然后选择绘制的每个涂鸦 当用户单击 保存 时UIButton该报告将被序列化并保存在CoreData 当用户单击任何报告进行查看后 该报告将被带到
  • SpriteKit:精灵在已设置的物理主体下相互移动

    因此 我创建了一个基于图块移动的玩家 并在地图周围创建了一堵墙 以将玩家保持在操场上 两者都有一个物理主体 我的猜测是 我的玩家移动不正确 因此玩家会撞到墙上 让我向你展示我的代码 这就是玩家的物理主体 self physicsBody u