मैं चारों ओर तेजी से साथ खेल रहे हैं और एक स्क्रॉल दृश्य के साथ एक टाइल आधारित खेल बनाने के लिए तो खिलाड़ी केंद्रीय है कोशिश कर रहे हैं। मैं प्रबंधक है जिस तरह का काम करने के लिए इसे पाने के लिए, लेकिन मैं क्या वर्तमान में है की चोटी पर सभी नोड्स redrawing जा करने के लिए, तो मैं 1000 से अधिक नोड्स है और इस खेल को एक रोकने के लिए grinds कुछ चलता रहता है के बाद लग रहे हैं। मुझे लगता है कि नए ड्राइंग करने से पहले मुझे सभी पुराने नोड्स को हटाने की ज़रूरत है? मैंने बच्चों को हटाने की तरह इसे करने के तरीकों पर एक नज़र डाली है, लेकिन फिर मैं आगे बढ़ने के बाद तैयार नहीं हुआ।बेसिक तेज/SpriteKit खेल - मुसीबत redrawing
मैं भागों है कि नीचे स्प्राइट ड्राइंग से जुड़े हैं शामिल किया है।
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
}
}
क्या मैं खिलाड़ी के आसपास टाइल आकर्षित करने के लिए उपयोग कर रहा हूँ, और अगर मैं क्या खिलाड़ी स्थिति बदलने के लिए और उसके बाद फोन placeAllTiles2D() फ़ंक्शन का उपयोग कर रहा नीचे तो नई स्थिति के आधार पर पुनः बनाने का है ।
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()
}
}
किसी भी मदद की वास्तव में बहुत सराहना की जाएगी। कृपया नम्र रहो, यह मेरा पहला कदम तेजी से कुछ भी है!
आप केवल नए स्प्राइट बनाने रखने के लिए तो हाँ अंततः आप प्रदर्शन छत मारा जाएगा। या तो नए बनाने के साथ अनियंत्रित sprites को हटा दें, या केवल नए बनाने के बजाय उन्हें स्थानांतरित/समायोजित करें। – courteouselk
@ एंटोनब्रोनिकोव उत्तर के लिए धन्यवाद, ऐसा लगता है कि मुझे पुराने sprites को हटाने की जरूरत है, मैं बस यह सोच रहा हूं कि यह कैसे करें, अगर मैं self.removeAllChildren() – James
कुछ ऐसा करता हूं तो नए sprites को रखने से पहले कुछ भी नहीं चलने के बाद जब मैं ऐप चलाता हूं – James