gpt4 book ai didi

ios - 在 SpriteKit 中以随机坐标生成一个节点

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:07:44 25 4
gpt4 key购买 nike

我正在尝试生成一个我在随机坐标处创建的节点。到目前为止,我已经通过执行以下操作进行了尝试:

- (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:

这是我的主视图 Controller 。非常标准,只需加载 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;
}

最佳答案

Sometimes the node appears on the screen, sometimes it doesn't. I guess it's going out of bounds. How can I fix that? The orientation of the phone is landscape, so do the coordinates change?

是因为使用的高度和宽度不对。

在您的代码中,[MyScene sceneWithSize:skView.bounds.size] 将始终以纵向 方向返回大小,即使它在设备/模拟器上是横向的,发生是因为你把它放在 viewDidLoad 上。

如果您想获取当前方向(横向)的大小,请将代码放在viewDidLayoutSubviews,而不是viewDidLoad

转到“ViewController.m”,将 viewDidLoad 替换为 viewDidLayoutSubviews

- (void)viewDidLayoutSubviews
{
[super viewDidLayoutSubviews];

SKView * skView = (SKView *)self.view;
skView.showsFPS = YES;
skView.showsNodeCount = YES;

SKScene * scene = [MyScene sceneWithSize:skView.bounds.size];
scene.scaleMode = SKSceneScaleModeAspectFill;

[skView presentScene:scene];
}

文档链接:https://developer.apple.com/library/ios/documentation/uikit/reference/UIViewController_Class/Reference/Reference.html#//apple_ref/occ/instm/UIViewController/viewDidLayoutSubviews

关于ios - 在 SpriteKit 中以随机坐标生成一个节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21790094/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com