我制作游戏,一切都很好。但是我这个自定义按钮似乎有问题:
let button = UIButton(type: UIButtonType.Custom) as UIButton
let image = UIImage(named: "bluePlayButton")
button.setImage(image, forState: UIControlState.Normal)
button.frame = CGRectMake(self.size.width/2, self.size.height * 0.15, 300, 200)
button.layer.zPosition = 1
self.view?.addSubview(button)
当我运行应用程序时,该按钮不会出现。我的代码有什么问题,是否有遗漏?
答案 0 :(得分:1)
我目前正在将一些UI元素集成到sprite-kit场景中,我不得不说这有点棘手。如果您可以向我提供有关该课程其他元素的更多信息,请选择SKScene
或SKNode
(SKView)还是-(void)didMoveToView:(SKView *)view {
//Your code but in Objective-C
UIButton * button = UIButton
UIButton * button = [UIButton buttonWithType:UIButtonTypeCustom];
UIImage * image = [UIImage imageNamed:@"bluePlayButton"];
[button setImage:image forState:UIControlStateNormal];
[button setFrame:CGRectMake(self.size.width/2, self.size.height * 0.15, 300, 200)];
button.layer.zPosition=1;
[self.view addSubView:button];
}
。当混合两种方法时,这真的很痛苦。
但是根据您提供的信息,我可以告诉您我遇到了同样的问题,并且我解决了更改我在SKScene上添加UI元素的方法的问题。在 viewDidLoad 之前,我应该在 viewDidAppear 上进行。
示例(目标-C):
`
//fire button
- (SKSpriteNode *)fireButtonNode
{
SKSpriteNode *fireNode = [SKSpriteNode spriteNodeWithImageNamed:@"fireButton.png"];
fireNode.position = CGPointMake(fireButtonX,fireButtonY);
fireNode.name = @"fireButtonNode";//how the node is identified later
fireNode.zPosition = 1.0;
return fireNode;
}
`
此外,仔细检查按钮的zPosition和其他元素。
确保使用调试器正确加载图像。即使使用扩展名(.png),也可能会发生一些事情以防止这种情况发生。 (正如@matt在评论中所建议的那样)
我强烈建议避免将UIKit元素与Sprite-Kit元素混合使用。
修改强>: 另一个如何在Sprite-Kit中执行与UIButton相对应的示例(最简单的方法)。
(刚从这个问题中取出 - Setting up buttons in SKScene)
您可以使用SKSpriteNode作为按钮,然后当用户触摸时,检查这是否是触摸的节点。使用SKSpriteNode的name属性来标识节点:
[self addChild: [self fireButtonNode]];
将节点添加到场景中:
//handle touch events
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [touches anyObject];
CGPoint location = [touch locationInNode:self];
SKNode *node = [self nodeAtPoint:location];
//if fire button touched, bring the rain
if ([node.name isEqualToString:@"fireButtonNode"]) {
//do whatever...
}
}
处理触摸:
{
name: "Alex"
id: 1
}
{
name: "Felix"
id: 2
}
db.collection.find({}, {name:1, id:0}).toArray()