- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我想制作一个汽车在路上行驶的小动画,所以我制作了一个包含 9 张不同图片的图集。这辆车看起来就像它的轮子在旋转,并且在行驶过程中有一点弹跳。我已经制作了一个带有图像的 SKSpriteNode 并在其上添加了一个物理体,以便它可以跳跃并受重力影响。
所以我想知道如何将物理体添加到 SKAtlasTexture 或通过我的 image.xcassets 文件夹创建动画。我试图将 SKSpriteNode 更改为 SKAtlasTexture,但这显然不起作用,因为 SKAtlasTexture 中没有物理实体。这就是我所在的位置。任何建议或解决方案将不胜感激。
这里是我的部分代码:
class PlayScene: SKScene, SKPhysicsContactDelegate {
let road = SKSpriteNode(imageNamed: "road")
var origRoadPositionX = CGFloat(0)
var maxRoad = CGFloat(0)
var groundSpeed = 3
var carBaseLine = CGFloat(0)
let car = SKSpriteNode(imageNamed: "car")
enum ColliderType:UInt32{
case car = 1
case tower = 2
}
override func didMoveToView(view: SKView) {
self.backgroundColor = UIColor(hex: 0x80E8FF)
self.physicsWorld.contactDelegate = self
//Car
self.car.position = CGPointMake(CGRectGetMinX(self.frame)-20 + self.car.size.width, self.carBaseLine)
self.car.physicsBody = SKPhysicsBody (rectangleOfSize: self.car.size)
self.car.physicsBody?.allowsRotation = false
self.car.physicsBody?.affectedByGravity = false
self.car.physicsBody?.categoryBitMask = ColliderType.car.rawValue
self.car.physicsBody?.contactTestBitMask = ColliderType.tower.rawValue
self.car.physicsBody?.collisionBitMask = ColliderType.tower.rawValue
self.addChild(car)
如果需要更多代码才能找到解决方案,请告诉我,我可以提供更多代码。
最佳答案
您可以使用 atlas 文件夹对图像进行动画处理。
考虑下面的例子:
import SpriteKit
class GameScene: SKScene {
var bombFrames : [SKTexture]!
var bomb : SKSpriteNode!
let NoneCategory : UInt32 = 0x1 << 0
let ProjectileCategory : UInt32 = 0x1 << 2
let bombCategory : UInt32 = 0x1 << 7
override func didMoveToView(view: SKView) {
/* Setup your scene here */
runAction(SKAction.repeatActionForever(SKAction.sequence([SKAction.runBlock(addBomb), SKAction.waitForDuration(5.0)])))
}
override func update(currentTime: CFTimeInterval) {
/* Called before each frame is rendered */
}
func addBomb() {
let Name = "Bomb"
let AnimatedAtlas = SKTextureAtlas(named: Name)
var Framese = [SKTexture]()
let numImages = AnimatedAtlas.textureNames.count
for var i=1; i<=numImages; i++ {
let TextureName = "\(i)"
Framese.append(AnimatedAtlas.textureNamed(TextureName))
}
bombFrames = Framese
let firstFrame = bombFrames[0]
bomb = SKSpriteNode(texture: firstFrame)
let actualY = random(min: bomb.size.height/2, max: size.height - bomb.size.height/2)
bomb.position = CGPoint(x: size.width + bomb.size.width/2, y: actualY)
bomb.physicsBody = SKPhysicsBody(texture: bomb.texture, size: bomb.texture!.size())
bomb.physicsBody?.dynamic = true
bomb.physicsBody?.categoryBitMask = bombCategory
bomb.physicsBody?.contactTestBitMask = ProjectileCategory
bomb.physicsBody?.collisionBitMask = NoneCategory
bomb.physicsBody?.usesPreciseCollisionDetection = true
addChild(bomb)
let actualDuration = random(min: CGFloat(2.0), max: CGFloat(4.0))
let actionMove = SKAction.moveTo(CGPoint(x: -bomb.size.width/2, y: actualY), duration: NSTimeInterval(actualDuration))
let actionMoveDone = SKAction.removeFromParent()
bomb.runAction(SKAction.sequence([actionMove, actionMoveDone]))
playBombAnimation()
}
func random() -> CGFloat {
return CGFloat(Float(arc4random()) / 0xFFFFFFFF)
}
func random(#min: CGFloat, max: CGFloat) -> CGFloat {
return random() * (max - min) + min
}
func playBombAnimation() {
bomb.runAction(SKAction.repeatActionForever(SKAction.animateWithTextures(bombFrames, timePerFrame: 0.1, resize: false, restore: true)), withKey:"bombAnimation")
}
}
不要忘记像这样将 atlas 文件夹添加到项目导航器中:
正如您在代码中看到的,您可以将物理体添加到您的 Sprite 中。如果您愿意,可以尝试这种方式。
希望这会有所帮助。
关于swift - 如何将物理体添加到 SKAtlasTexture 或通过 Images.xcassets 创建动画?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31691317/
我的项目中有两个 xcassets: 并且两者都被复制到包资源中。 而且我可以在xib上看到图片: 当我运行项目时,设备/模拟器上没有显示 bjzjicons.xcassets 中的图片。 但是如果我
我正在开发一个自定义贴纸应用程序扩展,我想遍历我的 Sticker.xcassets 文件夹,而不是设置一个固定的 for 循环。 例如: func getStickers() { for i
当我新建一个 xcode 项目时,默认有一个图像文件夹,我想知道它们之间有什么区别吗? Assets.xcassets是不是newerp> 最佳答案 什么是 Assets ? Assets 目录,用于
我在 Xcassets 中编辑一些文件时不小心删除了 LaunchImage 文件集。我该如何取回它!? 我尝试查看目标,使用 xcassets 作为包含图像的文件夹的选项不再存在。 最佳答案 我四处
我在使用 XCAssets 时遇到问题。我创建了一个自定义的 XCAssets 文件,里面有图标。我从这样的文件中获取图像: [UIImage imageNamed:@"deniedOverlay"]
这是我做的。 更改 xcassets 文件夹中的图像名称。 尝试提交。然后收到这样的错误消息。' 多尝试几次 退出xcode,重新打开xcode 清理和构建 点击源代码管理,然后点击提交,看到“没有文
在以前版本的 xcode 中,您可以将图像文件设置为可本地化的文件,并为不同的语言环境导入不同的图像文件。 我似乎无法使用 Xcode 5 中的新 XCAssets 功能来做到这一点。有没有办法在 x
我在几个小时内浏览了许多 Swift 和 Objective-C 帖子,以帮助我创建一个返回 xcassets 中目录的字符串文件名数组的函数。然后,我可以使用文件名数组创建另一个函数,向用户显示随机
我的 Assets 目录中有多个图像,如下所示。有没有一种方便的方法来加载图像而无需每次都使用硬编码字符串: var images = [UIImage]() images.append(UIImag
我正在尝试从 xcasserts 文件夹中获取图像,我在代码中执行了此操作: if (self.emailField.text.isEmpty ) { self.emailIcon.
我有一个包含多个目标的 iOS 应用。每个目标都有自己的 .xcassets,用于保存特定于该目标的图像,我还有一个基本的 .xcassets 文件夹,用于保存在所有目标之间共享的图像。 基础 .xc
我有一个本地化的 iOS 应用程序。我本地化了我的图像并将它们设置为来自代码的 View 。我从 .xcassets 中删除了本地化图像,现在这些图像位于某个文件夹“localized_images”
我们为 3 个不同的应用程序设定了 3 个目标,提供相似的功能集但具有不同的 UI。所有这 3 个目标都有不同的 .xcassets 文件。但现在根据 Apple 4.3 指南,他们要求我们创建一个容
我在 Adobe Illustrator 上设计了一幅图像,其 H:100 像素和 W:2000 像素。当设备处于横向左侧时,此 Assets 应穿过屏幕底部并从头到尾完全覆盖它。 据我所知,iP
我将所有 3 个版本(@1x、@2x 和 @3x)的应用程序图标存储在 xcassets 中。 Size of an Asset: { @1x: 28, @2x: 56, @3x: 84} 但是当我试
Images.xcassets 中的我的 AppIcon 组有 4 个框,您可以在其中放置不同设备和 iOS 版本的图标。但是,我尝试了几种在网上找到的不同尺寸的图标,当我尝试构建、存档或验证项目时,
我正在用 Swift/SpriteKit 制作一些动画 我有一张透明背景的图片。图像 Canvas 本身是 250 x 250,里面有一个大约 100x100 的球图像(所以它是一个被透明包围的 10
如何调用保存在 xcassets 文件夹中的图像? 我正在使用 ARKit。我想通过在球形节点周围包裹“地球”皮肤来制作“地球”人物。我可以为它分配一种颜色,如下所示: earth.geometry?
我在本地将图像加载到 WKWebView。 我可以使用以下方式加载本地资源: let imgURL = URL(fileURLWithPath: Bundle.main.bundlePath, isD
我在 Assets 目录 (xcassets) 文件中将我的 iOS 应用程序的颜色称为颜色集。 在运行时,我希望能够更改这些颜色集的值。这可能吗?如果是,怎么做? 我一直没有找到方法来做到这一点。
我是一名优秀的程序员,十分优秀!