SceneKitFrogger icon indicating copy to clipboard operation
SceneKitFrogger copied to clipboard

Juegos

Open santiago007-ai opened this issue 10 months ago • 0 comments

import SpriteKit

class GameScene: SKScene, SKPhysicsContactDelegate { var player: SKSpriteNode! var scoreLabel: SKLabelNode! var score = 0 { didSet { scoreLabel.text = "Score: (score)" } }

override func didMove(to view: SKView) {
    physicsWorld.contactDelegate = self
    backgroundColor = .black
    setupPlayer()
    setupScoreLabel()
    startEnemySpawn()
}

func setupPlayer() {
    player = SKSpriteNode(imageNamed: "player")
    player.position = CGPoint(x: size.width / 2, y: 100)
    player.setScale(0.5)
    player.physicsBody = SKPhysicsBody(rectangleOf: player.size)
    player.physicsBody?.isDynamic = false
    player.name = "player"
    addChild(player)
}

func setupScoreLabel() {
    scoreLabel = SKLabelNode(fontNamed: "Arial")
    scoreLabel.text = "Score: 0"
    scoreLabel.fontSize = 24
    scoreLabel.fontColor = .white
    scoreLabel.position = CGPoint(x: size.width / 2, y: size.height - 50)
    addChild(scoreLabel)
}

func startEnemySpawn() {
    let spawn = SKAction.run { self.createEnemy() }
    let wait = SKAction.wait(forDuration: 1.5)
    let sequence = SKAction.sequence([spawn, wait])
    let repeatForever = SKAction.repeatForever(sequence)
    run(repeatForever)
}

func createEnemy() {
    let enemy = SKSpriteNode(imageNamed: "enemy")
    let xPosition = CGFloat.random(in: 50...(size.width - 50))
    enemy.position = CGPoint(x: xPosition, y: size.height)
    enemy.setScale(0.5)
    enemy.physicsBody = SKPhysicsBody(rectangleOf: enemy.size)
    enemy.physicsBody?.velocity = CGVector(dx: 0, dy: -200)
    enemy.physicsBody?.linearDamping = 0
    enemy.physicsBody?.categoryBitMask = 2
    enemy.name = "enemy"
    addChild(enemy)
}

func fireBullet() {
    let bullet = SKSpriteNode(color: .yellow, size: CGSize(width: 5, height: 20))
    bullet.position = player.position
    bullet.physicsBody = SKPhysicsBody(rectangleOf: bullet.size)
    bullet.physicsBody?.velocity = CGVector(dx: 0, dy: 300)
    bullet.physicsBody?.linearDamping = 0
    bullet.physicsBody?.categoryBitMask = 1
    bullet.name = "bullet"
    addChild(bullet)
}

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    if let touch = touches.first {
        let location = touch.location(in: self)
        let move = SKAction.moveTo(x: location.x, duration: 0.2)
        player.run(move)
        fireBullet()
    }
}

override func update(_ currentTime: TimeInterval) {
    for node in children {
        if node.position.y < 0 {
            node.removeFromParent()
        }
    }
}

func didBegin(_ contact: SKPhysicsContact) {
    if let bullet = contact.bodyA.node as? SKSpriteNode,
       let enemy = contact.bodyB.node as? SKSpriteNode {
        bullet.removeFromParent()
        enemy.removeFromParent()
        score += 10
    }
}

}

santiago007-ai avatar Mar 16 '25 02:03 santiago007-ai