SpriteKit改变Node锚点其物理对象位置不对的解决
在创建Node的物理对象后,默认情况下物理对象和Node的实际边界相应的非常好,由于此时Node的默认锚点是当中心位置即(0.5,0.5),只是假设我们改变了Node的锚点,就会发现其物理边界还是保持原来的位置,这可不是我们想要的结果:
let bouncer = SKSpriteNode(imageNamed: "bouncer")
bouncer.anchorPoint = CGPoint(x: 0.5, y: 0)
bouncer.position = CGPoint(x: 0, y: -frame.size.height/2.0)
bouncer.physicsBody = SKPhysicsBody(circleOfRadius: bouncer.size.width/2.0)
addChild(bouncer)
在打开了物理调试选项之后执行App,我们能够清楚地看到实际发生了神马:
之所以Node会诡异悬空,是由于其物理对象的边界已卡位在屏幕底部了.那为什么Node边界和物理边界不正确应呢?由于我们在代码中改动了它的锚点位置.
你可能以为物理对象也有诸如锚点之类的属性能够调整,可是并没有 :(
只是你能够在初始化物理对象的时候人肉定位当中心点,just like this:
bouncer.physicsBody = SKPhysicsBody(circleOfRadius: bouncer.size.width/2.0, center: CGPoint(x: 0, y: bouncer.size.height/2.0))
我来解释下一下center的含义:默认(0,0)是Node的中心位置,所以x不须要调整仍是0,只是y如上图所看到的,须要上移半个高度.
再次执行App,问题得以解决!
SpriteKit改变Node锚点其物理对象位置不对的解决的更多相关文章
- Chipmunk僵尸物理对象的出现和解决(二)
如第一篇文章中图片所示,该游戏是一个弹球游戏. 玩法很简单,屏幕底部有一个反弹棒,用来确保小球不掉出屏幕同时反弹小球撞击屏幕上方的砖块. 玩家可以触摸屏幕来左右移动反弹棒. 等等!还不是这么简单,当小 ...
- Chipmunk僵尸物理对象的出现和解决(一)
最近在写的BrickHit游戏App中出现了一个比较头疼的问题. 该问题很难用常规手段调试,因为其发生看起来貌似是随机的. 我想在这里将这个问题的现象和解决过程详细的记录下来,一来避免其他童鞋走弯路, ...
- Chipmunk僵尸物理对象的出现和解决(七)
首先判断问题出现在Star的类方法doStickShorterWork中,于是逐步分词注释代码,最后剩下如下代码: +(void)doStickShorterWork:(Stick *)stick{ ...
- Chipmunk僵尸物理对象的出现和解决(五)
,因为将反弹棒变长和缩短的代码是类似的所以我们只看一个即可,就让我们详细看看缩短的方法吧. +(void)doStickShorterWork:(Stick *)stick{ GameScene *g ...
- Chipmunk僵尸物理对象的出现和解决(六)
既然出现了这个问题下面就是如何找到原因. 因为该问题不是每次都出现,偶尔反弹棒碰到五角星时才会多出一个僵尸棒,现象比较随机,较难悉知具体原因. 有时多次触碰又没有出现问题,有时短时间内每次触碰都出现问 ...
- Chipmunk僵尸物理对象的出现和解决(八)
如何解决? 等到碰撞方法返回后在调用Star类方法.碰撞方法在物理引擎的一帧内应该会处理完成,在下一帧里碰撞回调已经结束.所以我们将Star类方法的调用放到下一帧里执行即可,代码如下: //... @ ...
- Chipmunk僵尸物理对象的出现和解决(三)
首先是触摸移动反弹棒的代码: -(void)touchMoved:(CCTouch *)touch withEvent:(CCTouchEvent *)event{ CGPoint location ...
- Chipmunk僵尸物理对象的出现和解决(四)
接上一篇,我们看看五角星和反弹棒碰撞时的代码: -(BOOL)ccPhysicsCollisionBegin:(CCPhysicsCollisionPair *)pair star:(CCNode * ...
- UGUI 实例预制对象位置不对
public static Object Instantiate(Object original, Transform parent, bool instantiateInWorldSpace); / ...
随机推荐
- [BZOJ4260]Codechef REBXOR(Trie)
Trie模板题.求出每个前缀和后缀的最大异或和区间,枚举断点就可.不知为何跑得飞快. #include<cstdio> #include<cstring> #include&l ...
- 埃及分数 a* 搜索 知识点mark
题意 在古埃及,人们使用单位分数的和(即1/a,a是自然数)表示一切有理 数. 例如,2/3=1/2+1/6,但不允许2/3=1/3+1/3,因为在加数中不允许有相同的. 对于一个分数a/b,表示方法 ...
- 【树形DP】BZOJ1596-[Usaco2008 Jan]电话网络
[题目大意] 在一棵有n个节点的树上建信号塔,每个节点的信号塔可以覆盖当前节点极其相连的节点.问要覆盖所有节点,至少需要多少座信号塔? [思路] 经典的树形DP,直接复制一下. f[i][0]:以i为 ...
- Qt on android 蓝牙开发(控制小车)
因为要做一个用蓝牙控制小车的app,就用着QT搞了下,网上关于QT蓝牙开发的资料比较少,我在这里记录下过程希望对看到了人有所帮助 首先在项目文件里添加 QT += bluetooth 这样就可以用QT ...
- intellj远程调试设置
场景:本地intelllij想远程调试服务器A,服务器A上起得是resin服务 步骤: 1.登陆服务器A,给resin添加启动参数. 方法一:修改resin.xml,修改完后重启resin服务器 在r ...
- java同步ldap实例
1.准备过程 1.1 在windows server 2008 R2操作系统下搭建AD域,不懂得看链接地址:http://99532720.blog.51cto.com/2194488/696611 ...
- CentOS 6.9/7安装Parse+PostgreSQL
一.安装Parse-Server # npm install -g parse-server --unsafe-perm 备注:用--unsafe-perm参数的目的是使用了root权限进行安装. 二 ...
- LT1946A-- Transformerless dc/dc converter produces bipolar outputs
Dual-polarity supply provides ±12V from one IC VC (Pin 1): Error Amplifier Output Pin. Tie external ...
- .Net 加密 哈希
一.DES加解密 DES一共就有4个参数参与运作:明文.密文.密钥.向量.其中这4者的关系可以理解为: 密文=明文+密钥+向量: 明文=密文-密钥-向量: 为什么要向量这个参数呢?因为如果有一篇文章, ...
- UVa 637 - Booklet Printing
题目:模拟输出n页书的装订打印状态. 分析:模拟.页数为(n+3)/ 4,仅仅有n不超过半篇时会输出半篇. 说明:好多曾经做过的题目(⊙_⊙). #include <cstdlib> #i ...