簡體   English   中英

SpriteKit:計算兩個紋理蒙版之間的距離

[英]SpriteKit : calculate distance between two texture masks

我在SpriteKit中有兩個不規則的形狀,我想計算一個太空船底部的垂直距離和下面的(不規則)地形。

有辦法嗎? 謝謝 ! 在此輸入圖像描述

將SKPhysicsBody放置在船舶中心的一條線形狀中,寬度為1,場景高度,然后在didBeginContact方法中,抓住2個接觸點。 你現在知道2分,只需使用距離公式(在這種情況下它只是y2-y1),你有答案

我找到了一種不同的方法來解決我的問題,但我認為KnightOfDragon的一個在概念上更好(盡管我沒有設法讓它工作)。

terrain的紋理本質上是一個具有不透明和透明像素的位圖。 所以我決定解析這些像素,為每列存儲最高的不透明像素,構建一個“雷達高度圖”。 所以我只需要計算船底和中心正下方柱的高度之間的差異:

CFDataRef imageData = CGDataProviderCopyData(CGImageGetDataProvider(terrain.texture.CGImage));
const UInt32 *pixels = (const UInt32*)CFDataGetBytePtr(imageData);

NSMutableArray *radar = [NSMutableArray new];
for (long col = 0; col < terrain.size.width; col++)
    [radar addObject:@(0)];

for (long ind = 0; ind < (terrain.size.height * terrain.size.width); ind++)
{
    if (pixels[ind] & 0xff000000) // non-transparent pixel
    {
        long line = ind/terrain.size.width;
        long col = ind - (line*terrain.size.width);
        if ([radar[col]integerValue] <terrain.size.height-line) radar[col] = @(terrain.size.height-line);
    }
}

當然,這個解決方案可以進行優化。 這只是基本的想法。

我添加了一個圖像來顯示原始紋理,它表示為不透明/透明像素,並通過放置小白色節點來檢查“表面”的位置進行測試。 在此輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM