标签: skspritenode

如何从SKSpriteNode获取图像名称?

我想得到我在SKSpriteNode上使用的图像的名称.

这是我创建节点的方式:

SKSpriteNode *button = [SKSpriteNode spriteNodeWithImageNamed:@"img.png"];
Run Code Online (Sandbox Code Playgroud)

通过触摸屏幕,我想在NSLog上获得此图像的名称.

UITouch *touch = [touches anyObject];
CGPoint loc = [touch locationInNode:self];
SKSpriteNode *node = (SKSpriteNode *)[self nodeAtPoint:loc];
Run Code Online (Sandbox Code Playgroud)

通过触摸节点,我想得到NSLog信息,这个SKSpriteNode使用名为img.png的图像.

我该如何解决这个问题?

提前致谢.

objective-c uiimage ios sprite-kit skspritenode

2
推荐指数
1
解决办法
1610
查看次数

将脉冲应用于SKSpriteNode以使其具有随机方向

我有一个球在屏幕上反弹.根据用户所达到的水平,我让球更快.所以,我做了以下事情:

[ball.physicsBody applyImpulse:[self vectorForLevel:self.level]];
Run Code Online (Sandbox Code Playgroud)

构建的方法CGVector.

- (CGVector)vectorForLevel:(int)level {
    CGFloat thrust = level+3;
    return CGVectorMake(thrust*cosf(4), thrust*sinf(-4));
}
Run Code Online (Sandbox Code Playgroud)

虽然这个效果非常好并且可以像我想的那样加速每个级别,但我还想随机化球的起始角度,但我不知道该怎么做.

我不太了解CGVector如何真正知道如何改变角度.我扔在那里的角度是4和-4吗?

有谁知道如何随机化方向?

objective-c game-physics ios sprite-kit skspritenode

2
推荐指数
1
解决办法
689
查看次数

Xcode如何自动从其父节点中删除skspritenode

我是objectif-c和sprite-kit开发的新手(但不是编程).所以我开始使用Apple的Spri.该应用程序完美无缺,但是当岩石落入场景底部时,表示岩石的节点会自动从其父节点移除.这个,没有实现 - (void)didSimulatedPhysics方法:

- (void)didSimulatedPhysics
{
  [self enumerateChildNodesWithName:@"rock" usingBlock:^(SKNode *node, BOOL *stop) {
    if (node.position.y < 0)
      [node removeFromParent];
  }];
}
Run Code Online (Sandbox Code Playgroud)

我可以看到屏幕上显示的节点计数器:它不会随着岩石的数量而增加.所以我的问题是:Xcode是否为我的程序管理removeFromParent方法?如果是,你能告诉我禁用的选项.我尝试将ARC设置为NO,但它没有任何改变.

我希望我的信息很清楚.如果没有,请告诉我.提前感谢您的回答.

拉斐尔

xcode ios7 sprite-kit skspritenode

2
推荐指数
1
解决办法
1911
查看次数

创建SKSpriteNode子类的子类

假设我想创建一堆不同类型的太空飞船.我想设置一个基础宇宙飞船类,我可以用它来创建其他具有微小差异的宇宙飞船.

我的基类看起来像这样.

// BaseSpaceship.h
@interface SpaceshipNode : SKSpriteNode
@property NSColor color;
@property CGFloat engineThrust;
+ (id)baseSpaceshipWithImageNamed:(NSString *)name;
@end

// BaseSpaceship.m
@implementation BaseSpaceship
+ (id)baseSpaceshipWithImageNamed:(NSString *)name {
    BaseSpaceship *ship = [BaseSpaceship spriteNodeWithImageNamed:name];

    ship.color = [NSColor redColor];
    ship.engineThrust = 2.0;

    return ship;
}
@end
Run Code Online (Sandbox Code Playgroud)

我可以在MyScene.m中创建一艘这样的船就好了.

BaseSpaceship *baseClass = [BaseSpaceship baseSpaceshipWithImageNamed:@"BaseShip"];
Run Code Online (Sandbox Code Playgroud)

但是,我不知道如何创建一个子类BaseSpaceship,例如DestroyerSpaceship.我不确定我是否应该使用静态方法.我在网上看到的例子使用静态方法来实例化SKSpriteNodes.这就是我提出的,但这是错误的.

// DestroyerSpaceship.h
@interface DestroyerSpaceship : BaseSpaceship
@property CGFloat missileThrust;
- (id)makeDestroyerSpaceship;
@end

// DestroyerSpaceship.m
@implementation DestroyerSpaceship
- (id)makeDestroyerSpaceship{
    DestroyerSpaceship *ship = [DestroyerSpaceship baseSpaceshipWithImageNamed:@"DestroyerShip"];
    ship.engineThrust = …
Run Code Online (Sandbox Code Playgroud)

inheritance objective-c sprite-kit skspritenode

2
推荐指数
1
解决办法
2169
查看次数

Swift中的随机值

我正在尝试使用介于0和屏幕大小之间的值.所以我这样做了:

let sizeX = Int(CGRectGetMaxX(self.frame))
let sizeY = Int(CGRectGetMaxY(self.frame))
var randomX = CGFloat(arc4random()) % sizeX
var randomY = CGFloat(arc4random()) % sizeY
self.touchButton.position = CGPointMake(randomX, randomY)
Run Code Online (Sandbox Code Playgroud)

我有这个错误:找不到接受提供的参数的'%'的重载

我需要这个随机化一个SkSpriteNode的位置,也许有更好的解决方案?

谢谢

arc4random sprite-kit skspritenode swift

2
推荐指数
1
解决办法
3867
查看次数

在不改变大小的情况下改变 skspritenode 的纹理

当我更改 spritenode 的纹理时,大小会自动更改为纹理图像(png)的原始大小。

我怎样才能避免这种情况?

我的代码:

var bomba = SKSpriteNode(imageNamed: "bomba2") 
var actionbomba = SKAction()
bomba.size = CGSizeMake(frame2.size.width/18, frame2.size.width/18)   
let bomba3 = SKTexture(imageNamed: "bomba3.png")
actionbomba.addObject(SKAction.moveBy(CGVectorMake(0, frame.size.height/2.65), duration: 2))
actionbomba.addObject(SKAction.setTexture(bomba3,resize: false))         

addChild(bomba)
bomba.runAction(SKAction.repeatAction(SKAction.sequence(actionbomba), count: -1))
Run Code Online (Sandbox Code Playgroud)

xcode textures ios skspritenode swift

2
推荐指数
1
解决办法
1147
查看次数

随机时间产生的节点在一个SKAction序列中结合waitForDuration:withRange和runBlock :.

我正在使用SpriteKit进行游戏,我在屏幕顶部产生节点并且下降.但是,我希望这些节点以0.1到3秒之间的随机时间间隔生成.例如,第一个节点在1.3秒内产生,下一个在1.8中产生,然后是2.5,然后是0.8,依此类推.我不知道如何利用waitForDuration函数来做到这一点.我目前拥有的代码是:

let wait = SKAction.waitForDuration(3, withRange: 2)
let spawn = SKAction.runBlock { addTears()
}

let sequence = SKAction.sequence([wait, spawn])
self.runAction(SKAction.repeatActionForever(spawn))
Run Code Online (Sandbox Code Playgroud)

当我尝试运行它时,此代码会冻结我的游戏.我删除了addTears()并放了一个日志,日志上有一个无限循环.我需要知道如何摆脱这个.

我的addTears()函数的代码是:

func addTears() {
    let Tears = SKSpriteNode (imageNamed: "Tear")
    Tears.position = CGPointMake(Drake1.position.x, Drake1.position.y - 2)
    Tears.zPosition = 3
    addChild(Tears)

//gravity
Tears.physicsBody = SKPhysicsBody (circleOfRadius: 150)
Tears.physicsBody?.affectedByGravity = true

//contact
Tears.physicsBody = SKPhysicsBody (circleOfRadius: Tears.size.width/150)
Tears.physicsBody!.categoryBitMask = contactType.Tear.rawValue
Tears.physicsBody!.contactTestBitMask = contactType.Bucket.rawValue
}
Run Code Online (Sandbox Code Playgroud)

sprite-kit skaction skspritenode swift

2
推荐指数
1
解决办法
518
查看次数

SpriteKit 中的坐标系

我对 spritekit 坐标系很困惑。我需要澄清两个案例。

情况1:

当一个精灵节点作为子节点添加到场景中时:

SKSpriteNode * blueBall = [SKSpriteNode spriteNodeWithImageNamed:@"hRedBall.png"];
blueBall.name=@"blueball";
blueBall.size=CGSizeMake(75, 75);
blueBall.position=point; //I am varying this point
[self addChild:blueBall];
Run Code Online (Sandbox Code Playgroud)

我每次都在不同的点添加节点。这些是我在以下位置添加节点的点: (100x100)(200x200)(300x300)(400x400)(900,600)

在我的 iphone 5 设备中,它们看起来像这样:

在此处输入图片说明 在此处输入图片说明 在此处输入图片说明 在此处输入图片说明 在此处输入图片说明 在此处输入图片说明

如果您查看 100x100,当我在设备上的 (100,100) 点添加精灵时,当我记录节点位置时,它向我显示 (99.9,138.17),这与点 (100,100) 相比存在巨大差异。

即使其他点也有变化,我忽略了它们,因为对于其他点来说差异太小了。

-(void)didMoveToView:(SKView *)view {
    /* Setup your scene here */
      [self bounceTheBlueBallAtPoint:CGPointMake(100, 100)];

}

    -(void)bounceTheBlueBallAtPoint:(CGPoint)point{


    SKSpriteNode * blueBall = [SKSpriteNode spriteNodeWithImageNamed:@"hRedBall.png"];
    blueBall.name=@"blueball";
    blueBall.size=CGSizeMake(75, 75);

    blueBall.physicsBody=[SKPhysicsBody bodyWithCircleOfRadius:blueBall.frame.size.width/2];


    blueBall.physicsBody.categoryBitMask=blueBallHitCategory;
    blueBall.physicsBody.collisionBitMask=blueBallHitCategory|pinkBallHitCategory|wallHitCategory;
    blueBall.physicsBody.contactTestBitMask=blueBallHitCategory|pinkBallHitCategory|wallHitCategory;

    blueBall.physicsBody.dynamic=YES;
    blueBall.physicsBody.affectedByGravity=NO;
    blueBall.physicsBody.restitution=1.0;
    blueBall.physicsBody.friction=0.0;
    blueBall.physicsBody.linearDamping=0.0;
    blueBall.physicsBody.angularDamping=0.0;

    blueBall.position=point;

    [self addChild:blueBall];


    //applying impulse to bounce off
//    CGVector …
Run Code Online (Sandbox Code Playgroud)

coordinate-systems ios sprite-kit skspritenode

2
推荐指数
1
解决办法
2176
查看次数

更新/更改SKSpriteNode的图像

是否可以更新/更改图像SKSpriteNode
以下代码不起作用:

var boss1 = SKSpriteNode(imageNamed: "boss1.png")
boss1 = SKSpriteNode(imageNamed: "boss2.png")
Run Code Online (Sandbox Code Playgroud)

ios sprite-kit skspritenode sktexture swift

2
推荐指数
1
解决办法
1885
查看次数

SKSpriteNode坚持使用init(edgeLoopF​​rom :) - SKPhysicsBody

我在下面有一个名为"Floor"的单独课程.

class Floor: SKNode {
    override init() {
        super.init()
        //let edgeFrame = CGRect(origin: CGPoint(x: 1,y: 1), size: CGSize(width: 1078, height: 1950))
        //self.physicsBody = SKPhysicsBody(edgeLoopFrom: edgeFrame)

        let borderBody = SKPhysicsBody(edgeLoopFrom: self.frame)
        borderBody.friction = 0
        self.physicsBody = borderBody

        // Apply a physics body to the node
       // self.physicsBody?.isDynamic = false

        // Set the bit mask properties
        self.physicsBody?.categoryBitMask = floorCategory
        self.physicsBody?.contactTestBitMask = nailDropCategory
        self.physicsBody?.collisionBitMask = balloonCategory
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemted")
    }
}
Run Code Online (Sandbox Code Playgroud)

我基本上已经下降了SKSpriteNode,它从屏幕顶部开始,然后到达触及"Floor"的底部并移除自身,然后再次从顶部重新开始.我遇到的问题是我的所有SKSpriteNode一直卡在最顶层而不是掉落在屏幕边框周围.如何告诉我的应用程序忽略这些特定节点并让它们进入?感谢任何帮助!


这是在屏幕上左右移动的对象,但它只是在没有edgeLoop的情况下从屏幕的一侧掉落

if let …
Run Code Online (Sandbox Code Playgroud)

sprite-kit skphysicsbody skspritenode swift

2
推荐指数
1
解决办法
220
查看次数