如何在Sprite-kit中划一条线?例如,如果我想在cocos2d中绘制一条线,我可以轻松使用 ccDrawLine();
sprite-kit中有相同的东西吗?
我一直在钻研Apple的新Sprite Kit,并且已经使用了一段时间了.然而,当我试图为一个弯曲的路径绘制时,我遇到了一个问题SKShapeNode.它似乎只是绘制一条直线.
这是我遇到的一个非常简单的例子 - 试图绘制CGPath一个SKShapeNode:
CGMutablePathRef path = CGPathCreateMutable();
CGPathMoveToPoint(path, NULL, 0, 0);
CGPathAddQuadCurveToPoint(path, NULL, 50, 100, 100, 0);
CGPathAddLineToPoint(path, NULL, 50, -100);
CGPathCloseSubpath(path);
SKShapeNode *shape = [[SKShapeNode alloc]init];
shape.path = path;
[self addChild:shape];
CGPathRelease(path);
Run Code Online (Sandbox Code Playgroud)
这是我的ASCII艺术,它正在做什么(抱歉,我没有足够的声誉发布实际图像):
---------------------------------------------------------------------------------
| EXPECTED RESULT | ACTUAL RESULT |
---------------------------------------------------------------------------------
| | |
| __----__ | |
| / \ <- Curve | ? |
| / \ | ____________ |
| \ / | \ / |
| …Run Code Online (Sandbox Code Playgroud) 我刚开始使用swift进行ios开发,我无法弄清楚如何绘制圆圈.我只想绘制一个圆圈,将其设置为变量并显示在屏幕上,以便我以后可以将其用作主要播放器.谁能告诉我怎么做或者为我提供代码?
我在网上找到了这个代码:
var Circle = SKShapeNode(circleOfRadius: 40)
Circle.position = CGPointMake(500, 500)
Circle.name = "defaultCircle"
Circle.strokeColor = SKColor.blackColor()
Circle.glowWidth = 10.0
Circle.fillColor = SKColor.yellowColor()
Circle.physicsBody = SKPhysicsBody(circleOfRadius: 40)
Circle.physicsBody?.dynamic = true //.physicsBody?.dynamic = true
self.addChild(Circle)
Run Code Online (Sandbox Code Playgroud)
但当我把它放在xcode上运行应用程序时,游戏场景中没有任何内容.
我正在尝试在swift中创建一个SKShapeNode的子类作为SKShapeNode(circleOfRadius:radius),但是没有指定的init.
任何人有任何变通办法或有关原因的信息?我不确定这是一个bug还是故意的.我发现这个视频演示了SKSpriteNode的解决方法,但它不适用于我. https://skillsmatter.com/skillscasts/5695-how-to-subclass-a-skspritenode
总的来说,我正在尝试为SKShapeNode创建一个子类,然后我可以再次从子类中使用不同的版本来更轻松地管理我的代码.TIA
谢谢马丁我之前发现了这个例子.它可以工作,但我怎么会把它变成一个圆而不是一个矩形?
import Foundation
import SpriteKit
class Player : SKShapeNode {
override init() {
super.init()
self.name = "Player"
self.fillColor = UIColor.blackColor()
}
init(rectOfSize: CGSize) {
super.init()
var rect = CGRect(origin: CGPointZero, size: rectOfSize)
self.path = CGPathCreateWithRect(rect, nil)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
Run Code Online (Sandbox Code Playgroud)
在主要代码中
let playerOne = Player(rectOfSize: CGSize(width: 100, height: 100))
Run Code Online (Sandbox Code Playgroud) 除了这里提出的问题:用SpriteKit在矩形中画一个洞?由于两者之间没有令人满意的答案,两者之间最显着的区别是这个问题需要缺少解决方法,特别是要求扭转SKCropNodes的功能.
由于孔的随机性,孔的数量以及孔要应用的物体的变化,上述问题可以解决的hacky方式的类型无法解决这个问题中的主要问题.
因此瑞士奶酪的例子如下:
想象一堆随机大小的矩形SKSpriteNodes,充满各种色调的奶酪色.
如何通过从每片奶酪中切出随机圆圈来制作瑞士奶酪?
如果SKCropNodes是圈子,他们只留下圆形的奶酪片而不是从奶酪块中切出孔.有没有办法反转SKCropNodes的行为,所以他们切换孔?
image-masking sprite-kit skspritenode skcropnode skshapenode
我正在尝试制作一个具有非常思考笔画的SKShapeNode(如0.25像素).似乎lineWidth为1是我可以去的最小值,至少在屏幕上看起来是这样的,无论是什么值设置为小于1.
SKShapeNode *buttonOutline;
buttonOutline = [[SKShapeNode alloc] init];
CGMutablePathRef myPath = CGPathCreateMutable();
CGPathAddRoundedRect(myPath, NULL, CGRectMake(0, 0, 100, 30), 10, 10);
buttonOutline.path = myPath;
buttonOutline.strokeColor=[SKColor grayColor];
buttonOutline.lineWidth= 0.25;
buttonOutline.name = [NSString stringWithFormat:@"%@-buttonOutline", thisButtonName];
buttonOutline.position = CGPointMake(thisXPos,thisYPod);
buttonOutline.alpha = 1;
Run Code Online (Sandbox Code Playgroud) 我正在使用Sprite Kit 制作一个" Achtung die kurve ".对于不断移动的线/玩家,我正在使用A CGMutablePathRef和SKShapeNode.在更新方法中,我正在这样做
// _lineNode is an instance of SKShapeNode and path is CGMutablePathRef
CGPathAddLineToPoint(path, NULL, _xPos, _yPos);
_lineNode.path = path;
Run Code Online (Sandbox Code Playgroud)
添加到该行.更新方法还在不断更新_xPos和_yPos以使其增长.
我想我真正要问的是有另一种更有效的绘制线条的方法,因为我现在这样做的方式现在会在一段时间后(大约15-20秒)将帧速率降低太多.此时FPS不断下降,直到游戏无法播放.时间分析器告诉我这一行:_lineNode.path = path是FPS丢弃的原因.
谢谢你的帮助!非常感谢.
PS.我试图不使用SKShapeNode,因为他们似乎无法画得太好(曲线中的小孔/文物等)
截图:

我想创建一个简单的圆形装载机动画圆圈和它周围的边框正在消失
我找到了很棒的框架,但他们使用SKShapeNode和SKShapeNode性能对于实际部署的应用程序来说非常糟糕
我正在我的游戏的说明屏幕上工作,并希望向用户显示他们应该点击屏幕的某个区域.
所以我想在哪里展示动画
1)手指伸缩进出屏幕,然后 - 工作正常 -
2)改变不透明度的矩形(显示在那里点击)然后 - 需要帮助 -
3)文字闪烁,说"点击这里" - 需要帮助 -
对于1),我有这个(工作正常):
finger = SKSpriteNode(texture: fingerTxt)
finger.position = CGPoint(x: 330, y: 450)
finger.zPosition = 10
InstHolderNode.addChild(finger)
let fingerTapScaleDown = SKAction.scale(by: 0.6, duration: 0.7)
let fingerTapScaleUp = SKAction.scale(by: 1.6, duration: 0.7)
let fingerScalingSequence = SKAction.sequence([fingerTapScaleDown,fingerTapScaleUp])
let fingerTapScaleForever = SKAction.repeatForever(fingerScalingSequence)
finger.run(fingerTapScaleForever)
Run Code Online (Sandbox Code Playgroud)
对于2),我有:
var rect = SKShapeNode(rectOf: CGSize(width: 150.0, height: frame.height * 2))
rect.position = CGPoint(x: 300, y: 100)
rect.fillColor = SKColor.brown
rect.alpha …Run Code Online (Sandbox Code Playgroud) skshapenode ×10
sprite-kit ×10
ios ×5
swift ×4
cgpath ×1
cgpoint ×1
frame-rate ×1
init ×1
ios7 ×1
objective-c ×1
skcropnode ×1
skspritenode ×1
subclass ×1