Swift でスプライト キットを使用し、関数を使用してテクスチャを設定していSKTexture(rect:inTexture:)
ます。組み込みのテクスチャ アトラスを使用していません。代わりに、SKTexture(imageNamed:)
. これは、個別の画像ではなく、データ ファイルにアトラスとサブテクスチャの位置 (ピクセル単位) が既にあるためです。
したがって、画像が @2x (サイズがピクセル寸法の半分) の場合.size()
、オブジェクトの は正しいです。SKTexture
サブレクト座標 (単位座標は 0-1) をサイズで割って計算しますが、元の画像スケールを知る必要があるため、ピクセル寸法をそれで割ることができます。
うまく動作する私のコードは次のとおりです。
// Create the texture as a sub-rect of the parent texture
if let parentTexture = textures[parentTextureId] {
let size = parentTexture.size()
var subRect = CGRectFromString(subRectString)
subRect = CGRectMake(
(subRect.origin.x / 2) / size.width,
(size.height - ((subRect.origin.y / 2) + (subRect.size.height / 2))) / size.height,
(subRect.size.width / 2) / size.width,
(subRect.size.height / 2) / size.height)
let texture = SKTexture(rect: subRect, inTexture: parentTexture)
textures[textureId] = texture
}
/ 2
問題は、スケールのすべての調整をハードコーディングしなければならなかったことです。ハードコーディングせずにサブレクトを正しく計算できるように、テクスチャの元の画像スケール (または実際のピクセル寸法) を取得するにはどうすればよいですか?