gpt4 book ai didi

objective-c - 在 xcode 中使用 Sprite 表

转载 作者:搜寻专家 更新时间:2023-10-30 19:50:42 24 4
gpt4 key购买 nike

我正在尝试使用 sprite 表为我的游戏制作动画。我将如何从 sprite 表中删除每个 sprite 并在 xcode 中使用该 sprite?我目前正在使用 obj -c。我在某处读到我需要使用框架 cocoa2d 才能做到这一点?

最佳答案

在 sprite kit 中,您可以使用 SKTexture(rect: inTexture:) 初始值设定项来剪切部分纹理。这是一个帮助程序类,它管理一个均匀间隔的 Sprite 表,并可以在给定的行和列上剪切纹理。它像So一样使用

let sheet=SpriteSheet(texture: SKTexture(imageNamed: "spritesheet"), rows: 1, columns: 11, spacing: 1, margin: 1)
let sprite=SKSpriteNode(texture: sheet.textureForColumn(0, row: 0))

完整代码如下

//
// SpriteSheet.swift
//

import SpriteKit

class SpriteSheet {
let texture: SKTexture
let rows: Int
let columns: Int
var margin: CGFloat=0
var spacing: CGFloat=0
var frameSize: CGSize {
return CGSize(width: (self.texture.size().width-(self.margin*2+self.spacing*CGFloat(self.columns-1)))/CGFloat(self.columns),
height: (self.texture.size().height-(self.margin*2+self.spacing*CGFloat(self.rows-1)))/CGFloat(self.rows))
}

init(texture: SKTexture, rows: Int, columns: Int, spacing: CGFloat, margin: CGFloat) {
self.texture=texture
self.rows=rows
self.columns=columns
self.spacing=spacing
self.margin=margin

}

convenience init(texture: SKTexture, rows: Int, columns: Int) {
self.init(texture: texture, rows: rows, columns: columns, spacing: 0, margin: 0)
}

func textureForColumn(column: Int, row: Int)->SKTexture? {
if !(0...self.rows ~= row && 0...self.columns ~= column) {
//location is out of bounds
return nil
}

var textureRect=CGRect(x: self.margin+CGFloat(column)*(self.frameSize.width+self.spacing)-self.spacing,
y: self.margin+CGFloat(row)*(self.frameSize.height+self.spacing)-self.spacing,
width: self.frameSize.width,
height: self.frameSize.height)

textureRect=CGRect(x: textureRect.origin.x/self.texture.size().width, y: textureRect.origin.y/self.texture.size().height,
width: textureRect.size.width/self.texture.size().width, height: textureRect.size.height/self.texture.size().height)
return SKTexture(rect: textureRect, inTexture: self.texture)
}

}

margin 属性是图像边缘和 Sprite 之间的间隙。间距是每个 Sprite 之间的间隙。 fameSize 是每个 Sprite 的大小。这张图片解释了它:

Sprite Sheet Example

关于objective-c - 在 xcode 中使用 Sprite 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28008107/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com