Skip to content

Instantly share code, notes, and snippets.

@alikaragoz
Created October 19, 2023 13:02
Show Gist options
  • Save alikaragoz/0f3731504147e84478affada4eff23f0 to your computer and use it in GitHub Desktop.
Save alikaragoz/0f3731504147e84478affada4eff23f0 to your computer and use it in GitHub Desktop.
Emoji Party SpriteKit
import SpriteKit
import SwiftUI
// MARK: - GameScene
class GameScene: SKScene {
override func didMove(to _: SKView) {
physicsBody = SKPhysicsBody(edgeLoopFrom: frame)
}
var emojis: [String] = [
"❀️", "πŸ’–", "πŸ’›", "πŸ’", "🎁", "❀️‍πŸ”₯", "🫢", "πŸ’“", "πŸ₯°", "πŸ’š", "πŸ’—", "πŸ’ž", "πŸ’™", "πŸ–€", "🀍", "πŸŒ‹", "πŸš€", "✨", "🀘", "πŸ§‘β€πŸš€", "😻"
]
override func touchesBegan(_ touches: Set<UITouch>, with _: UIEvent?) {
guard let touch = touches.first else { return }
let location = touch.location(in: self)
let emoji = SKLabelNode(text: emojis.randomElement())
emoji.fontSize = 40.0
let texture = view!.texture(from: emoji)!
let spriteNode = SKSpriteNode(texture: texture)
spriteNode.position = location
spriteNode.physicsBody = SKPhysicsBody(texture: texture, size: spriteNode.size)
addChild(spriteNode)
}
}
// MARK: - ContentView
struct ContentView: View {
func scene(size: CGSize) -> SKScene {
let scene = GameScene()
scene.size = size
scene.scaleMode = .aspectFit
return scene
}
var body: some View {
GeometryReader { metrics in
let scene = scene(size: metrics.size)
SpriteView(scene: scene)
}.ignoresSafeArea()
}
}
#Preview {
ContentView()
}
@sowenjub
Copy link

Avec resizeFill, pas besoin de GeometryReader

struct EmojiPartyView: View {
    let scene: EmojiPartyScene
    
    init(emojis: [String]) {
        let scene = EmojiPartyScene(emojis: emojis)
        scene.scaleMode = .resizeFill
        scene.backgroundColor = .runnerBackground
        self.scene = scene
    }
    
    var body: some View {
        SpriteView(scene: scene)
            .ignoresSafeArea()
    }
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment