- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图为一个将被重复调用的节点创建一个 SKNode 子类,每次与用户交互,然后是破坏/爆炸效果。但是,每当我尝试运行代码时,都会收到 SIGABRT 错误。与调试终端中的 ___stack_chk_fail
有关。
此外,在检查器中,当 SIGABRT 的代码中断时,所有这些属性都显示为 nil
。
这是我的 SKNode 子类的 .m:
#import "CandyNode.h"
static const int MAX_VELOCITY = 20;
static const int MIN_VELOCITY = 2;
@implementation CandyNode
- (instancetype)init {
self = [super init];
if (self == [super init])
{
_spriteType = arc4random()%4+1;
NSString* imageRand = [NSString stringWithFormat:@"Sprite %i", _spriteType];
_background = [SKSpriteNode spriteNodeWithImageNamed:imageRand];
_background.name = @"Main";
_background.zPosition = 3;
[self addChild:_background];
_burst1 = [SKSpriteNode spriteNodeWithImageNamed:[NSString stringWithFormat:@"S%dB%d",_spriteType,1]];
_burst2 = [SKSpriteNode spriteNodeWithImageNamed:[NSString stringWithFormat:@"S%dB%d",_spriteType,2]];
_burst3 = [SKSpriteNode spriteNodeWithImageNamed:[NSString stringWithFormat:@"S%dB%d",_spriteType,3]];
_burst1.name = @"Burst #1";
_burst2.name = @"Burst #2";
_burst3.name = @"Burst #3";
[_background setHidden:NO];
[_burst1 setHidden:YES];
[_burst2 setHidden:YES];
[_burst3 setHidden:YES];
[self addChild:_burst1];
[self addChild:_burst2];
[self addChild:_burst3];
double burstAngle[3];
int offsetAngle = 240;
double burstDisplacement[3];
CGVector burstVector[3];
CGFloat x, y;
for (int i = 0; i<=3; i++){
burstAngle[i] = (arc4random()%60+120*i+offsetAngle)*3.1415/180;
burstDisplacement[i] = arc4random()%(MAX_VELOCITY-MIN_VELOCITY)+ MIN_VELOCITY;
x = burstDisplacement[i]*cos(burstAngle[i]);
y = burstDisplacement[i]*sin(burstAngle[i]);
burstVector[i] = CGVectorMake(x, y);
}
_explode1 = [SKAction sequence:@[[SKAction fadeInWithDuration:0],
[SKAction moveBy:burstVector[0] duration:.5],
[SKAction fadeOutWithDuration:.2]]];
_explode2 = [SKAction sequence:@[[SKAction fadeInWithDuration:0],
[SKAction moveBy:burstVector[1] duration:.5],
[SKAction fadeOutWithDuration:.2]]];
_explode3 = [SKAction sequence:@[[SKAction fadeInWithDuration:0],
[SKAction moveBy:burstVector[2] duration:.5],
[SKAction fadeOutWithDuration:.2]]];
}
return self;
}
.h:
#import <SpriteKit/SpriteKit.h>
@interface CandyNode : SKNode
//-(id)initWithImageNumber:(int)spriteType;
//-(void)explodeCandy;
@property (nonatomic) SKSpriteNode *background;
@property (nonatomic) SKSpriteNode *burst1;
@property (nonatomic) SKSpriteNode *burst2;
@property (nonatomic) SKSpriteNode *burst3;
@property (nonatomic) SKAction *explode1;
@property (nonatomic) SKAction *explode2;
@property (nonatomic) SKAction *explode3;
@property (nonatomic) int spriteType;
@end
它全部在主 SKScene 中调用:_NodeA = [CandyNode new];
,_NodeA 在该类的 header 中定义为 @property (nonatomic) CandyNode *NodeA;
我的问题显然是如何让它工作,或者如果我对如何使用子类和 SpriteKit 有严重的误解,我该如何以不同的方式做到这一点?
最佳答案
你正在调用 init 两次:
self = [super init];
if (self == [super init])
第一个正确地分配给 self,第二个创建一个实例,将其与 self 进行比较,然后丢弃新实例。
解决这个问题:
self = [super init];
if (self)
更新:
你声明了一个包含 3 个元素的数组:
double burstAngle[3];
然后枚举范围为 0 到 3 的数组(for 循环运行四次):
for (int i = 0; i<=3; i++){
当 i 为 3 时出现索引越界情况,数组索引从零开始。
像这样修复它:
for (int i = 0; i < 3; i++){
关于ios - SKNode 子类中的 __stack_chk_fail,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26177016/
我发现如果你想在 Sprite Kit 中使用物理,你必须在世界坐标中指定 anchor 。假设您有一个大节点树,这里有一辆汽车,那里有一个轮子。您只知道它们在父节点中的坐标。您想要在汽车和车轮之间定
我正在为场景创建一个 SKNode,并在每个单独的 SKNode 上记录触摸事件。我可以根据需要添加任意数量的内容,如果我触摸节点并且只有可见的节点,我才能看到日志消息,并且触摸会按预期工作。现在,如
基本上我想实现这样的目标:https://github.com/moqod/iOS-Scratch-n-See在 SpriteKit 中。 在 SKScene 中,我有一张汽车图像,2-3 种不同类型
我从一个函数返回一个 SKNode,我需要将它转换为自定义 SKNode。我收到错误消息无法将 SKNode的值分配给类型GroundNode。如果我强制转换,它会编译,但在运行时失败。我错过了什么?
我正在尝试使用 SpriteKit 模拟一只眼睛。 当用户的手指在屏幕上移动时,眼睛的瞳孔会跟踪用户的手指,但必须保持在眼睛的范围内。 我曾尝试使用 SKConstraint 解决此问题,但未成功。
我不明白为什么我在最后一行收到这个错误:'SKNode!'不是'SKNode'的子类型 func move_background(){ let enumerationBlock: (SKNod
我有一个场景,其中有许多子节点,它们是 SKNode 的子类。我正在尝试访问每个子节点的方法,但收到错误“‘SKNode’类型的值没有成员‘[成员名称]”。 全部基于 Xcode 10.2 上的 Sw
我正在使用 Sprite Kit 创建一个 iOS 应用程序,并且我正在尝试选择 (onTouchBegan) 位于另一个 SKNode 下方的 SKNode。结构是:第一层(SKNode)-第二层(
我在带有 SKScene 的 UIView 上有一个 UITapGestureRecognizer 和一个 UIPanGestureRecognizer。平移手势识别器从左到右移动一个 SKNode,
当事件发生时,SKNode 子类应该如何通知父场景? 我有一个 SKNode 子类,它根据游戏逻辑通过适本地重绘或删除节点来处理触摸事件。通知父场景(或其他同级 SKNode 实例)事件发生的 iOS
我有正确的字符串格式的 SKNODE。我想将字符串名称“A2Square”转换为名为 A2Square 的节点。 这可能吗? 是否有办法将字符串“A2Square”并以某种方式将其转换为同名的 SKN
我已经设置了场景,一切都运行良好。它看起来像这样: 但是 Controller 是在 Main.storyboard 中设置的,我想摆脱它。所以我做了这样的事情: window = UIWin
我知道为什么会出现该错误,但我无法找到解决方法。我试图让对象出现然后被删除,玩家应该在它们被删除之前尝试点击它们,但每次下一个节点即将出现时它都会崩溃。如果我在它的 func 中声明它,那么一切都会出
我的场景是,我正在沿着拱形移动现有节点,并希望它在到达另一侧时停止。一个简单的比喻是,我想让一些东西沿着彩虹移动。 虽然我当前的代码确实执行了正确的椭圆形,但它随后在我的 y 原点下方继续返回到其起点
我正在获取 int SpriteKit。并且想知道如何在 SKNode 对象上创建运动效果。 对于 UIView,我使用以下方法: +(void)registerEffectForView:(UIVi
我在不同的文件中有两个类。 在我的场景所在的“主”文件中,我调用此函数: override func touchesBegan(touches: Set, withEvent event: UIEve
好的,所以我有代码会在 1 和 2 之间选择一个随机数,并基于该数生成一个 metalCrate: 或只是一个 crate :。我想,金属 crate 应该需要轻按 2 次才能消失。不幸的是,使用我的
我目前正在同时使用 ARKit 和 CoreLocation 将元素放置在屏幕上。这些元素(例如建筑物、房屋等)基于它们自己的坐标(经度/纬度)和用户坐标放置。如您所知,即使设置了最佳精度,CoreL
我创建了一个运行良好的 SKNode 类。但是,我无法在实例化后更改其 .position。 按钮确实出现并正常工作,但在编程时不会改变位置。我已经包含了为下面的按钮制作的类,我还添加了实例化该类并调
出于学习目的,我正在使用 SpriteKit 和 Swift 5 编写一个类似 Pong 的游戏。我试图让玩家的 Racket (一个 SKNode 矩形)在 x 坐标的屏幕上移动但不能。 我试过这个
我是一名优秀的程序员,十分优秀!