我试图产生一个我在随机坐标下创建的节点。到目前为止,我已经做了以下尝试:在SpriteKit随机坐标中产生一个节点
- (SKShapeNode *)createTargetNode
{
int maxXCoord = CGRectGetMaxX(self.frame);
int maxYCoord = CGRectGetMaxY(self.frame);
int x = arc4random()% maxXCoord + 40;
int y = arc4random()% maxYCoord + 40;
SKShapeNode *target = [SKShapeNode new];
CGMutablePathRef circle = CGPathCreateMutable();
CGPathAddArc(circle, NULL, x, y, 5, 0, M_PI*2, YES);
target.path = circle;
target.fillColor = [SKColor redColor];
target.strokeColor = [SKColor redColor];
NSLog(@"%d, %d", x, y);
return target;
}
有时节点出现在屏幕上,有时它不会。我猜它已经出界了。我该如何解决这个问题?手机的方向是横向的,坐标是否改变?
谢谢!
编辑1:
下面是一些坐标已经被画在:
2014-02-14 17:54:09.629 reactions[16096:70b] 221, 402
2014-02-14 17:54:10.990 reactions[16096:70b] 273, 542
2014-02-14 17:54:11.586 reactions[16096:70b] 88, 299
2014-02-14 17:54:14.660 reactions[16096:70b] 69, 306
只有(88, 299)
和(69, 306)
实际上绘制。 这里的链接到图像(我不能发布它,但我没有足够的声誉):
编辑2:
这里是我的主视图控制器。相当标准,只需加载SKScene
。
#import "DKViewController.h"
#import "DKPlayScene.h"
@implementation DKViewController
- (void)viewDidLoad
{
[super viewDidLoad];
SKView * skView = (SKView *)self.view;
skView.showsFPS = YES;
skView.showsNodeCount = YES;
SKScene * scene = [DKPlayScene sceneWithSize:skView.bounds.size];
scene.scaleMode = SKSceneScaleModeAspectFill;
[skView presentScene:scene];
}
- (BOOL)shouldAutorotate
{
return YES;
}
- (NSUInteger)supportedInterfaceOrientations
{
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
return UIInterfaceOrientationMaskAllButUpsideDown;
} else {
return UIInterfaceOrientationMaskAll;
}
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
}
@end
而这里的SKScene实现文件:
#import "DKPlayScene.h"
#include <stdlib.h>
@interface DKPlayScene()
@property (nonatomic, strong) SKLabelNode *scoreLabel;
@property bool *gameHasStarted;
@property int *score;
@end
@implementation DKPlayScene
- (id)initWithSize:(CGSize)size
{
if (self = [super initWithSize:size]) {
self.gameHasStarted = NO;
self.backgroundColor = [SKColor colorWithRed:0.15 green:0.15 blue:0.3 alpha:1.0];
self.scoreLabel = [SKLabelNode new];
self.scoreLabel.text = @"High Score:";
self.scoreLabel.fontSize = 10;
self.scoreLabel.position = (CGPointMake(CGRectGetMidX(self.frame), CGRectGetMidY(self.frame) + 70));
[self createTargetNode];
[self addChild:self.scoreLabel];
}
return self;
}
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
[self addChild:[self createTargetNode]];
}
-(void)update:(CFTimeInterval)currentTime {
}
#pragma mark - Private
- (SKShapeNode *)createTargetNode
{
int maxXCoord = self.frame.size.width;
int maxYCoord = self.frame.size.height;
int circleWidth = 6;
int x = arc4random() % (maxXCoord - (circleWidth/2));
int y = arc4random() % (maxYCoord - (circleWidth/2));
SKShapeNode *target = [SKShapeNode new];
CGMutablePathRef circle = CGPathCreateMutable();
CGPathAddArc(circle, NULL, x, y, circleWidth, 0, M_PI*2, YES);
target.path = circle;
target.fillColor = [SKColor redColor];
target.strokeColor = [SKColor redColor];
NSLog(@"%d, %d", x, y);
return target;
}
你在哪里添加节点(节点位置是相对于它的父)和你改变它的位置?此外,你忘了CGPathRelease(圈子)。 – LearnCocos2D
@ LearnCocos2D 该节点在的touchesBegan方法加入: ' - (无效)的touchesBegan:(NSSet中*)触摸withEvent:方法(的UIEvent *)事件 { [自的addChild:[自createTargetNode]]; }' – Dan