Tôi đã chơi thử một cách nhanh chóng và cố gắng tạo một trò chơi xếp hình bằng chế độ xem cuộn để người chơi là trung tâm. Tôi đã quản lý để có được nó để loại công việc, nhưng tôi dường như được vẽ lại tất cả các nút trên đầu trang của những gì hiện đang có, vì vậy sau một vài di chuyển tôi có 1000 + nút và trò chơi xay để dừng lại. Tôi đoán tôi cần phải loại bỏ tất cả các nút cũ trước khi vẽ các nút mới? Tôi đã xem xét cách để làm điều này, như loại bỏ trẻ em, nhưng sau đó tôi kết thúc với không có gì rút ra sau khi di chuyển.Trò chơi swift/spritekit cơ bản - gặp khó khăn khi vẽ lại
Tôi đã bao gồm các phần được kết nối với bản vẽ sprite bên dưới.
func placeTile2D(tile:Tile, direction:Direction, position:CGPoint) {
let tileSprite = SKSpriteNode(imageNamed: textureImage(tile, direction: direction, action: Action.Idle))
if (tile == hero.tile) {
hero.tileSprite2D = tileSprite
hero.tileSprite2D.zPosition = 1
}
tileSprite.position = position
tileSprite.anchorPoint = CGPoint(x:0,y:0)
view2D.addChild(tileSprite)
}
func placeAllTiles2D() {
let playerPosCur = playerPosition
let playerPCX: Int = (Int(playerPosCur.x))
let playerPCY: Int = (-Int(playerPosCur.y))
var w = 1
var h = 1
for i in (playerPCY - 4) ..< (playerPCY + 4){
let row = tiles[i];
w = 1
for j in playerPCX - 4 ..< playerPCX + 4 {
let tile = Tile(rawValue: row[j].0)!
let direction = Direction(rawValue: row[j].1)!
let point = CGPoint(x: (w*tileSize.width), y: -(h*tileSize.height))
if w == 5 {
if h == 5 {
self.placeTile2D(Tile.Player, direction: .n, position: point)
}
}
w = w + 1
placeTile2D(tile, direction : direction, position : point)
}
h = h + 1
}
}
là những gì tôi đang sử dụng để vẽ các gạch xung quanh các cầu thủ, và sau đó dưới đây nếu những gì tôi đang sử dụng để thay đổi vị trí cầu thủ và sau đó gọi các placeAllTiles2D() để vẽ lại dựa trên vị trí mới .
override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) {
if let touch = touches.first {
let location = touch.locationInNode(view2D)
let touchPos2D = location
let moveXR = CGPoint(x:1,y:0)
let moveXL = CGPoint(x:-1,y:0)
let moveYU = CGPoint(x:0,y:1)
let moveYD = CGPoint(x:0,y:-1)
let beforeMove = playerPosition
var afterMove = CGPoint(x:0,y:0)
if touchPos2D.x > self.size.width*3/4 {
//Move player to right
afterMove = beforeMove + moveXR
}
if touchPos2D.x < self.size.width*1/4 {
//Move Player to left
afterMove = beforeMove + moveXL
}
if touchPos2D.y > -self.size.height/2 {
if touchPos2D.x < self.size.width*3/4 && touchPos2D.x > self.size.width*1/4 {
//Move PLayer Up
afterMove = beforeMove + moveYU
}
}
if touchPos2D.y < -self.size.height/2 {
if touchPos2D.x < self.size.width*3/4 && touchPos2D.x > self.size.width*1/4 {
//Move Player Down
afterMove = beforeMove + moveYD
}
}
playerPosition = afterMove
placeAllTiles2D()
}
}
Mọi trợ giúp sẽ được đánh giá rất nhiều. Hãy nhẹ nhàng, lần đầu tiên tôi đi bất cứ điều gì nhanh chóng!
Nếu bạn chỉ tiếp tục tạo sprites mới thì có thì cuối cùng bạn sẽ đạt trần hiệu suất. Xóa các sprites không cần thiết cùng với việc tạo các ảnh mới hoặc chỉ di chuyển/điều chỉnh chúng thay vì tạo các ảnh mới. – courteouselk
@AntonBronnikov cảm ơn câu trả lời, có vẻ đủ công bằng mà tôi cần phải xóa các hình ảnh cũ, tôi chỉ tự hỏi làm thế nào để làm điều này, nếu tôi làm một cái gì đó như self.removeAllChildren() – James
Trước khi đặt sprites mới sau đó sau khi di chuyển không có gì được vẽ khi tôi chạy ứng dụng – James