iOS 8中的SKShader,没有快速的GLVector?

时间:2014-11-09 15:19:28

标签: ios sprite-kit

尝试在Swift中翻译this时,我发现我的代码无法编译

let movementShader = SKShader(fileNamed: "reflection.fsh")
movementShader.addUniform(SKUniform(name: "size", SCNVector3: SCNVector3Make(0.0, 0.0, 0.0)))

在我的电话中说我有一个额外的参数。

这里有什么新鲜事,有什么想法吗?

由于

1 个答案:

答案 0 :(得分:2)

以下是一个示例实现。在SKShader上创建一个Objective-C类别,我称之为Unions。在.h文件中声明一个方法:

#import <SpriteKit/SpriteKit.h>

@interface SKShader (Unions)

+(SKShader*)shaderForX:(float)x y:(float)y z:(float)z;
@end

然后转到.m文件并执行:

#import "SKShader+Unions.h"

@implementation SKShader (Unions)

+(SKShader*)shaderForX:(float)x y:(float)y z:(float)z
{
    SKShader *shader = [SKShader shaderWithFileNamed:@"shader.fsh"];
    SKUniform *texture = [SKUniform uniformWithName:@"customTexture" texture:[SKTexture textureWithImageNamed:@"shade"]];
    SKUniform *uniformSCNVector = [SKUniform uniformWithName:@"size" floatVector3:GLKVector3Make(x, y, z)];

    [shader setUniforms:@[texture,uniformSCNVector]];
    return shader;
}
@end

不要忘记为项目创建桥接标题。它是一个名为"YourProjectName-Bridging-Header.h"的.h文件,包含#import "SKShader-Unions.h"指令。

现在你可以从Swift文件中调用:

let shader = SKShader(forX: x, y: y, z: y)