我正在爲iPad和iOS 10編寫一個應用程序。 我正在使用Objective-C和SpriteKit。繪製一個SKShapeNode線條顏色漸變從一種顏色到另一種
我需要繪製一條以一種顏色開始並以另一種顏色結束的線條(例如紅色到綠色)。
這是我的Objective-C代碼:
CGPoint points[2];
points[0] = CGPointMake(100, 100);
points[1] = CGPointMake(160, 110);
SKShapeNode *line1=[SKShapeNode shapeNodeWithPoints:points count:2];
line1.lineWidth = 2.0;
line1.zPosition = -1;
[email protected]"line";
SKShader *myShader=[SKShader shaderWithFileNamed:@"shader1.fsh"];
line1.strokeShader=myShader;
[self addChild:line1];
這是着色器:
void main(){
float length = u_path_length;
float distance = v_path_distance;
gl_FragColor = vec4(1.0*(1-(distance/length)), 1.0*(distance/length), 0., 1.);
}
當我運行的應用程序出現錯誤(與金屬): 失敗的斷言'在u_path_length [0]的索引1處缺少緩衝區綁定。'
它看起來像u_path_length和v_path_distance不iOS的10
工作,你可以幫助解決這個問題? 或者你能否提出一個不同的解決方案?
不知道這是否可以以某種方式幫助,還是會在性能影響你的情況:http://stackoverflow.com/q/34422374。或者你可以看看這個:http://stackoverflow.com/a/36261550/3402095 – Whirlwind
@Whirlwind感謝您的建議,但您鏈接的解決方案將創建一個圖像,然後可以用作紋理。問題是SKShapeNode不能很好地處理紋理(不能控制紋理大小),這就是爲什麼我想使用着色器。 我需要在屏幕上繪製很多這些線(至少100)。目前我正在考慮使用帶着色器(我認爲是最好的解決方案)的SKShapeNode或帶有來自資產(我已經有工作代碼)的圖像的SKSpriteNode。 – danyadd
理想情況下,您完全不應該使用SKShapeNode,因爲一個SKShapeNode需要一次繪製調用。意思是,你可能會很快遇到性能問題。與可以批量繪製的SKSpriteNode不同,SKShapeNodes不能,也不能像使用文檔中指出的那樣謹慎使用SKShapeNode。所以如果屏幕上同時出現超過10-15個實例,我會親自避免它。 – Whirlwind