Skip to content

Instantly share code, notes, and snippets.

@retrokid
Last active November 27, 2020 08:12
Show Gist options
  • Select an option

  • Save retrokid/66a9a0ad7bbeff7ea2ba33b755d81494 to your computer and use it in GitHub Desktop.

Select an option

Save retrokid/66a9a0ad7bbeff7ea2ba33b755d81494 to your computer and use it in GitHub Desktop.
2d character movement in spritekit 3
//
// GameScene.swift
// cros
//
// Created by efe ertugrul on 19/06/2017.
// Copyright © 2017 efe ertugrul. All rights reserved.
//
import SpriteKit
import GameplayKit
class GameScene: SKScene
{
// MARK:- PROPERTIES
var sagYuru : Bool = false
var solYuru : Bool = false
var asagiYuru : Bool = false
var yukariYuru : Bool = false
var followCamera : SKCameraNode = SKCameraNode()
var sprite : SKSpriteNode = SKSpriteNode.init()
var asagiYuruAnimate : SKAction = SKAction()
var sagaYuruAnimate : SKAction = SKAction()
var solaYuruAnimate : SKAction = SKAction()
var yukariYuruAnimate : SKAction = SKAction()
let stopLeftTexture : SKTexture = SKTexture.init(imageNamed: "sag_yuru_0001")
let stopRightTexture : SKTexture = SKTexture.init(imageNamed: "sol_yuru_0001")
let stopBottomTexture : SKTexture = SKTexture.init(imageNamed: "asagi_yuru_0001")
let stopTopTexture : SKTexture = SKTexture.init(imageNamed: "yukari_yuru_0001")
// MARK:- LOAD
override func didMove(to view: SKView)
{
followCamera = childNode(withName: "camera") as! SKCameraNode
self.camera = followCamera
let sagYuruF0001 : SKTexture = SKTexture.init(imageNamed: "sag_yuru_0001")
let sagYuruF0002 : SKTexture = SKTexture.init(imageNamed: "sag_yuru_0002")
let sagYuruF0003 : SKTexture = SKTexture.init(imageNamed: "sag_yuru_0003")
let sagYuruF0004 : SKTexture = SKTexture.init(imageNamed: "sag_yuru_0004")
let solYuruF0001 : SKTexture = SKTexture.init(imageNamed: "sol_yuru_0001")
let solYuruF0002 : SKTexture = SKTexture.init(imageNamed: "sol_yuru_0002")
let solYuruF0003 : SKTexture = SKTexture.init(imageNamed: "sol_yuru_0003")
let solYuruF0004 : SKTexture = SKTexture.init(imageNamed: "sol_yuru_0004")
let asagiYuruF0001 : SKTexture = SKTexture.init(imageNamed: "asagi_yuru_0001")
let asagiYuruF0002 : SKTexture = SKTexture.init(imageNamed: "asagi_yuru_0002")
let asagiYuruF0003 : SKTexture = SKTexture.init(imageNamed: "asagi_yuru_0003")
let asagiYuruF0004 : SKTexture = SKTexture.init(imageNamed: "asagi_yuru_0004")
let asagiYuruF0005 : SKTexture = SKTexture.init(imageNamed: "asagi_yuru_0005")
let asagiYuruF0006 : SKTexture = SKTexture.init(imageNamed: "asagi_yuru_0006")
let asagiYuruF0007 : SKTexture = SKTexture.init(imageNamed: "asagi_yuru_0007")
let asagiYuruF0008 : SKTexture = SKTexture.init(imageNamed: "asagi_yuru_0008")
let yukariYuruF0001 : SKTexture = SKTexture.init(imageNamed: "yukari_yuru_0001")
let yukariYuruF0002 : SKTexture = SKTexture.init(imageNamed: "yukari_yuru_0002")
let yukariYuruF0003 : SKTexture = SKTexture.init(imageNamed: "yukari_yuru_0003")
let yukariYuruF0004 : SKTexture = SKTexture.init(imageNamed: "yukari_yuru_0004")
let yukariYuruF0005 : SKTexture = SKTexture.init(imageNamed: "yukari_yuru_0005")
let yukariYuruF0006 : SKTexture = SKTexture.init(imageNamed: "yukari_yuru_0006")
let yukariYuruF0007 : SKTexture = SKTexture.init(imageNamed: "yukari_yuru_0007")
let yukariYuruF0008 : SKTexture = SKTexture.init(imageNamed: "yukari_yuru_0008")
yukariYuruF0001.filteringMode = .nearest
yukariYuruF0002.filteringMode = .nearest
yukariYuruF0003.filteringMode = .nearest
yukariYuruF0004.filteringMode = .nearest
yukariYuruF0005.filteringMode = .nearest
yukariYuruF0006.filteringMode = .nearest
yukariYuruF0007.filteringMode = .nearest
yukariYuruF0008.filteringMode = .nearest
asagiYuruF0001.filteringMode = .nearest
asagiYuruF0002.filteringMode = .nearest
asagiYuruF0003.filteringMode = .nearest
asagiYuruF0004.filteringMode = .nearest
asagiYuruF0005.filteringMode = .nearest
asagiYuruF0006.filteringMode = .nearest
asagiYuruF0007.filteringMode = .nearest
asagiYuruF0008.filteringMode = .nearest
sagYuruF0001.filteringMode = .nearest
sagYuruF0002.filteringMode = .nearest
sagYuruF0003.filteringMode = .nearest
sagYuruF0004.filteringMode = .nearest
solYuruF0001.filteringMode = .nearest
solYuruF0002.filteringMode = .nearest
solYuruF0003.filteringMode = .nearest
solYuruF0004.filteringMode = .nearest
let sagYuruFramesArray = [sagYuruF0001, sagYuruF0002, sagYuruF0003, sagYuruF0004]
let solYuruFramesArray = [solYuruF0001, solYuruF0002, solYuruF0003, solYuruF0004]
let asagiYuruFramesArray = [asagiYuruF0001, asagiYuruF0002, asagiYuruF0003, asagiYuruF0004, asagiYuruF0005, asagiYuruF0006, asagiYuruF0007, asagiYuruF0008]
let yukariYuruFramesArray = [yukariYuruF0001, yukariYuruF0002, yukariYuruF0003, yukariYuruF0004, yukariYuruF0005, yukariYuruF0006, yukariYuruF0007, yukariYuruF0008]
sprite = SKSpriteNode.init(texture: sagYuruFramesArray[0])
sprite.position = CGPoint(x: self.frame.midX, y: self.frame.midY)
self.addChild(sprite)
sagaYuruAnimate = SKAction.animate(with: sagYuruFramesArray, timePerFrame: 0.15)
solaYuruAnimate = SKAction.animate(with: solYuruFramesArray, timePerFrame: 0.15)
asagiYuruAnimate = SKAction.animate(with: asagiYuruFramesArray, timePerFrame: 0.15)
yukariYuruAnimate = SKAction.animate(with: yukariYuruFramesArray, timePerFrame: 0.15)
sprite.setScale(4)
}
// MARK:- CONTROLLER
override func keyUp(with event: NSEvent)
{
switch event.keyCode
{
case 2:
sprite.removeAllActions()
sprite.texture = stopLeftTexture
self.sagYuru = false
case 0 :
sprite.removeAllActions()
sprite.texture = stopRightTexture
solYuru = false
case 1 :
sprite.removeAllActions()
sprite.texture = stopBottomTexture
asagiYuru = false
case 13 :
sprite.removeAllActions()
sprite.texture = stopTopTexture
yukariYuru = false
default:break
}
}
override func keyDown(with event: NSEvent)
{
// w = 13
// a = 0
// s = 1
// d = 2
/*
124sag
123sol
126yukarı
125asagi
*/
if !sprite.hasActions()
{
switch event.keyCode
{
case 2:
sprite.run(SKAction.repeatForever(sagaYuruAnimate))
self.sagYuru = true
case 0 :
sprite.run(SKAction.repeatForever(solaYuruAnimate))
solYuru = true
case 1 :
sprite.run(SKAction.repeatForever(asagiYuruAnimate))
asagiYuru = true
case 13 :
sprite.run(SKAction.repeatForever(yukariYuruAnimate))
yukariYuru = true
default : break
}
}
print(event.keyCode)
}
// MARK:- UPDATE
override func update(_ currentTime: TimeInterval)
{
followCamera.position = sprite.position
if sagYuru
{
sprite.position = CGPoint(x: sprite.position.x + 4, y: sprite.position.y)
}
else if solYuru
{
sprite.position = CGPoint(x: sprite.position.x - 4, y: sprite.position.y)
}
else if asagiYuru
{
sprite.position = CGPoint(x: sprite.position.x, y: sprite.position.y - 4)
}
else if yukariYuru
{
sprite.position = CGPoint(x: sprite.position.x, y: sprite.position.y + 4)
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment