- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
概述:我正在从场景顶部添加一个敌人。敌人最初以 150 速度 X 向右移动。 map 有左墙和右墙。当他的左右墙受到敌人攻击时,他应该立即反转方向。
问题:当我从 initWithSize 调用函数 spawnEnemy 时,敌人会按预期行事,在敌人撞到每堵墙时反转方向。当我使用 NSTimer 每 2 秒调用 spawnEnemy 时,SKScene 无法识别敌人与墙壁接触,并且不会反转敌人的方向。下面提供了代码。
生成敌人方法:
-(void)spawnEnemy{
self.testingEnemy = [SKSpriteNode spriteNodeWithImageNamed:@"normalEnemy.png"];
self.testingEnemy.position = (CGPoint) {
CGRectGetMidX(self.scene.frame),
300
};
self.testingEnemy.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:self.testingEnemy.frame.size];
self.testingEnemy.physicsBody.dynamic = TRUE;
self.testingEnemy.physicsBody.affectedByGravity = TRUE;
self.testingEnemy.physicsBody.mass = 0.00150;
self.testingEnemy.physicsBody.restitution = 0.0;
self.testingEnemy.physicsBody.allowsRotation = FALSE;
self.testingEnemy.physicsBody.linearDamping = 0.0;
[self addChild:self.testingEnemy];
}
initWithSize
-(id)initWithSize:(CGSize)size {
if (self = [super initWithSize:size]) {
//[self spawnEnemy]; <--- This works with expected behavior
[NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(spawnEnemy) userInfo:nil repeats:NO];
}
return self
}
didBeginContact
- (void)didBeginContact:(SKPhysicsContact *)contact
{
if (contact.bodyA == self.testingEnemy.physicsBody && contact.bodyB == [self.map rightWall].physicsBody) {
NSLog(@"Hit right wall");
normalEnemyVelocityX = -normalEnemyVelocityX;
}
}
这是项目文件的链接:
最佳答案
我的2美分...
这是一个例子...
SKAction *wait = [SKAction waitForDuration:2.0];
SKAction *spawn = [SKAction performSelector:@selector(spawnEnemy) onTarget:self];
SKAction *waitThenSpawn = [SKAction sequence:@[wait, spawn]];
[self runAction:[SKAction repeatActionForever:waitThenSpawn]];
编辑:尝试以下操作...
1) 代码不会检查接触体是否交换,并且如果场景中有多个敌人,代码将不起作用。以下是解决这些问题的方法:
static inline SKSpriteNode *bodyToNode(SKPhysicsBody *body1,
SKPhysicsBody *body2,
NSString *name) {
SKSpriteNode *node = nil;
if ([body1.node.name isEqualToString:name]) {
node = (SKSpriteNode *)body1.node;
}
else if ([body2.node.name isEqualToString:name]) {
node = (SKSpriteNode *)body2.node;
}
return node;
}
- (void)didBeginContact:(SKPhysicsContact *)contact
{
SKSpriteNode *enemyNode = nil;
SKSpriteNode *wallNode = nil;
enemyNode = bodyToNode (contact.bodyA, contact.bodyB, @"enemy");
wallNode = bodyToNode (contact.bodyA,contact.bodyB, @"wall");
if (enemyNode && wallNode) {
NSLog(@"Hit right wall %@", self.testingEnemy);
normalEnemyVelocityX = -normalEnemyVelocityX;
}
}
2) 将以下内容从 Map.m 移至 Map.h
static const uint32_t playerCategory = 1 << 0;
static const uint32_t platformCategory = 1 << 1;
3) 您没有为敌人设置类别,您需要为敌人命名,以便 didBeginContact 正常工作。将以下内容添加到名为测试的方法中:
self.testingEnemy.physicsBody.categoryBitMask = playerCategory;
self.testingEnemy.name = @"enemy";
4) 在 Map.m 中,在代码中的适当位置添加以下内容:
self.leftWall.name = @"wall";
self.rightWall.name = @"wall";
5)从此语句中删除playerCategory:
self.bottomRightHorizWall.physicsBody.contactTestBitMask = platformCategory;
关于objective-c - 通过 NSTimer 添加 SpriteNode 时,SKScene 未检测到接触,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25458268/
我的SKPhysicsbody有一个奇怪的行为。 首先让我向您展示我的主节点: self.physicsWorld.contactDelegate = self self.physicsWorld.g
嘿,我有一个选择器,它在mainBundle中搜索所有.aif文件,并允许用户选择它们。效果很好,但是后来我从项目和文件夹中删除了一些文件,但是它们并没有消失。有没有办法重新编译它或其他东西,因为它现
我需要说的是,一位开发人员告诉您应该创建一个 skphysicals 主体,以便该函数主体能够正常工作,那么是否有任何特定代码来创建该 Sprite 的 skphysicals 主体?因为我已经在物理
所以我在屏幕中央有一个 150 x 150 的主 Imageview,我以编程方式创建具有随机 x 和 y 值以及随机宽度/高度(这些值相同)的 View 。我希望 View 围绕主 ImageVie
我的 Contact 7 Form 样式的宽度一直有问题,这让我抓狂。 http://www.sportshosts.com/ 顶部表单 - 按钮不会与字段垂直对齐 顶部表单 - 当您缩小窗口时,它会
我正在尝试制作棋盘,但正方形的外观有点问题。棋盘配色方案工作正常,但由于某种原因,每个方 block 的 Angular 似乎没有接触。 这是我的 2 行代码片段,其中每个数据条目属于“light”类
标题解释得很清楚。这个怎么做?两个 div 的大小不同。两个 div 都在移动(我正在制作一个 Jquery 小游戏)。如果一个撞到另一个,我希望事情发生。 谢谢 最佳答案 没有onOverlap的J
我正在使用 cocos2dx 并设置两个具有相同 Physics Body 定义的 Sprites,如下所示 PhysicsBody *physicsBody=PhysicsBody::createB
我正在开发一个带有两个 div 的简单气球游戏。问题是当两个 div 相互接触时我无法触发功能。 最佳答案 您正在寻找边界框碰撞检测。如果你想引发一个事件,你必须反复测试,但最好只在游戏循环中对所有游
问题 我有很多 .php 文件,大部分包含 HTML,但顶部还有一些 PHP 行(例如表单触发代码或类似代码)。所以他们看起来像 My Website 目标 我的
我在 PostGIS 和 PostgreSQL 中有一个包含 LINESTRING 列的表。我正在构建一个查询,该查询是将此表与其自身连接的结果,并且我知道每个连接的几何列(称它们为 geom),即第
我正在尝试编写一个 python 脚本来修改我正在解析的文件中 标记的内容。由于它的速度,我为此使用 lxml.html(而不是 BeautifulSoup 等)。 script 标签的内容包含在注
block ?
Prettier 通常在 HTML 上做得非常好,但会缩进 pre>code blocks。 我总是希望预>代码块不缩进。 似乎我应该能够在 .prettierignore 中配置它,但找不到可行的方
我已成功将 pdf 文件从 URL 加载到 Web View 。我想在触摸 webview 后获取坐标,将其数据发送到服务器,以在服务器端的该位置添加一些文本。问题是当 webview 缩放或滚动到第
我目前想要获取的只是 gd:email 的属性,即“address=”,目前仅此而已。我可以得到 xml 部分,哎呀,只要它在标签内,我什至可以得到任何给定的想法,但要获得任何给定的属性,就像我的情况
我是一名优秀的程序员,十分优秀!