- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
Sprite 有一个物理 body 。当 Sprite 向任何方向移动时,物理体都会向该方向移动(参见附图)。这不利于接触和碰撞。
物理体仅在运动过程中发生位移。当 Sprite 静止时,物理体不会发生位移。
我的问题:为什么在 sprite kit 中物理体会在移动方向上发生位移?有什么办法可以预防吗?
非常感谢
编辑:
好的..我写了一个小测试来演示这个问题。我只有一个具有不受重力影响的物理体的节点。物理世界也没有引力。通过触摸屏幕,英雄向上移动。如果您请测试代码,请设置 SKView showsPhysics
属性 = YES。通过触摸,观察物理体如何从正确的位置移动。然后它在运动的所有时间都在运动方向上位移。
感谢您的任何建议。
// header file
#import <SpriteKit/SpriteKit.h>
@interface TestScene : SKScene <SKPhysicsContactDelegate>
@end
// implementation file
#import "TestScene.h"
@implementation TestScene
{
SKNode *_world;
SKSpriteNode *_hero;
BOOL _play;
BOOL _touch;
CGFloat _startY;
}
- (instancetype)initWithSize:(CGSize)size
{
if(self = [super initWithSize:size])
{
self.backgroundColor = [SKColor whiteColor];
self.physicsWorld.contactDelegate = self;
// no gravity
//self.physicsWorld.gravity = CGVectorMake(0.0f, -9.8f);
_play = NO;
_touch = NO;
_startY = 50;
[self addWorld];
[self addHero];
}
return self;
}
- (void)addWorld
{
_world = [SKNode node];
_world.position = CGPointMake(0, 0);
[self addChild:_world];
}
- (void)addHero
{
_hero = [SKSpriteNode spriteNodeWithImageNamed:@"hero"];
_hero.size = CGSizeMake(50, 50);
_hero.position = CGPointMake(CGRectGetMidX(self.frame), _startY);
[_world addChild:_hero];
_hero.physicsBody = [SKPhysicsBody bodyWithCircleOfRadius:_hero.size.width/2.0f];
_hero.physicsBody.affectedByGravity = NO;
_hero.physicsBody.dynamic = YES;
_hero.physicsBody.allowsRotation = NO;
}
- (void)applyHeroUpwardForce
{
[_hero.physicsBody applyForce:(CGVectorMake(0, 100))];
// limit velocity
CGVector vel = _hero.physicsBody.velocity;
vel.dy = vel.dy > 1000 ? 1000 : vel.dy;
_hero.physicsBody.velocity = vel;
// control the hero movement. it really moves upwards even we don’t see that, since the _world moves downwards
NSLog(@"_hero.position.y: %f", _hero.position.y);
}
- (void)updateWorld
{
_world.position = CGPointMake(_world.position.x, -(_hero.position.y - _startY));
}
- (void)didSimulatePhysics
{
if(!_play)
return;
if(_touch)
{
[self applyHeroUpwardForce];
[self updateWorld];
}
}
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
if(!_play)
_play = YES;
_touch = YES;
}
- (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
_touch = NO;
}
- (void)touchesCancelled:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
_touch = NO;
}
@end
编辑2:
The same issue in the game 'Pierre Penguin Escapes The Antarctic'
最佳答案
在使用 SpriteKit 时,我已经看到这种情况发生在您要在物理接触处理程序委托(delegate)方法中更新 sprite 的位置时。
切勿在回调委托(delegate)方法中更新底层节点的位置/旋转/缩放。取而代之的是有一种机制来识别和跟踪在物理回调中进行的所需更新,并有一个从场景的更新方法中调用的单独方法,该方法将要对节点进行的更改应用。
关于ios - Sprite-kit:运动过程中位移的物理体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42236145/
如果此答案为 Kotlin,我想转换代码:https://stackoverflow.com/a/5402769/2735398 我将其粘贴到 Intellij 中: private int deco
对于这种转变: System.out.println(0b10000000_00000000_00000000_00000001>>>32); 我得到这个输出值: -2147483647 对吗? 最佳
如果没有大量工作,我想要的可能是不可能的,但也许有人有解决方案。我有一个像下面这样的图(这当然是一个过于简单的例子),其中我的刻度标签彼此非常接近: dd <- data.frame(x=1:4, y
试过这个代码on Go playground : package main import ( "fmt" ) func main() { log2Dim := uint32(9)
我希望在用户滚动时获取 UIScrollView 的位移,每次滚动时只需要位移。使用这个方法 -(void)scrollViewWillEndDragging:(UIScrollView *)scro
我正在检查我在装有 iOs 5.1 的 Ipad 中的应用程序当我点击 textarea 时,光标会跳到书写线上方两行。虽然焦点位于正确的位置,但光标的视觉外观出现在焦点线上方两行。对此有任何建议。
你如何获得像 -10 这样的数字?从这些移位练习题中? 据我了解X*32可以写成 x> 1 = 0001 0111 >> 1 = 000 1011 = 11 //right bit-shift by
我正在查看适用于 Linux 的开源 AMD GPU 驱动程序。我注意到一些我以前没有见过的东西,我想知道目的。在sid.h文件的第1441行,有一系列的定义是整数被左移0位。这不就是对原始整数进行操
这个网站 localhotchat.com 有文字从红色栏流出。我试过调整它,但它似乎并没有消失。 主页(和内部)上的 14pt 文本片段应该在 red_colored_strip 内,但它不是,并且
问题#1 在 Java 中,移位是否比使用单个语句将 移位相同数的代价高出数倍? 例如,是 int x = 5; x = x << 16; 比快 int x = 5; for (int i=0; i<
我有三个 Div,周围的 Div 是“MainDiv”,里面的 Top Div 是“UpperDiv”下一个是“FooterDiv”。 在 Mozilla 中一切正常,但在 Chrome 中“Foot
所以,我正在阅读一本关于 Go 的书(Ivo Balbaert 的 The Way to Go),其中有一个代码示例: const hardEight = (1 > 97 因为我没有在这台机器上安装
Android 平台提供了两类动画。 一类是Tween动画,就是对场景里的对象不断的进行图像变化来产生动画效果(旋转、平移、放缩和渐变)。 下面就讲一下Tweene Animations。 主要类:
我有 UINavigationItem,我想向它添加 UISearchBar。我是这样做的: let searchBar = UISearchBar(frame: CGRectMake(0, 0, s
本文实例讲述了Android动画之渐变动画(Tween Animation)。分享给大家供大家参考,具体如下: Android 平台提供了两类动画。 一类是Tween动画,就是对场景里的对象不断的
我在 C# 中使用 openCV 库中的 Lucas Kanade 光流算法;有一系列帧,我想在每两个帧中找出什么是光流并将其显示在图片框中。 我可以从以下函数中获取 velX 和 velY: Emg
我是一名优秀的程序员,十分优秀!