尝试在Swift中翻译this时,我发现我的代码无法编译
let movementShader = SKShader(fileNamed: "reflection.fsh")
movementShader.addUniform(SKUniform(name: "size", SCNVector3: SCNVector3Make(0.0, 0.0, 0.0)))
在我的电话中说我有一个额外的参数。
这里有什么新鲜事,有什么想法吗?
由于
答案 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)