카드 게임을 개발 중이며 52 장이 보이고 20 장이 보이고 나머지는 "스택"에 있습니다. 물리학은 없으며 특별한 것은 없으며 PNG 이미지가있는 SKSpriteNodes 만 있습니다. 내 iMAC에서 90 % CPU로 실행 중이며 iPhone 5S에서는 감동적인 반응이 나타날 때까지 1 초당 "느낌"을 보입니다. 한 장면에 너무 많은 SKSpriteNodes가있는 것이 문제입니까? 또는 .22의 scaleFactor가 문제가 될 수 있습니까?한 장면에 몇 개의 SKNode가 있습니까? 내 실적이 그렇게 나쁜 이유는 무엇입니까?
내 실수는 어디에서 왔습니까? 여기
나는 카드를 그냥 당신이 모든 스프라이트를 추가하고 업데이트 방법에 장면을 설정하는 것 같습니다 눈치 좋아class PlayingCardView : SKSpriteNode {
init(imageNamed: String, cardIndex: Int) {
let cardTexture = SKTexture(imageNamed: imageNamed)
let cardScaleFactor:CGFloat = 0.22
let cardSize = CGSizeMake(cardTexture.size().width * cardScaleFactor,cardTexture.size().height * cardScaleFactor)
super.init(texture: cardTexture, color: nil, size: cardSize)
self.name = "\(cardIndex)"
}
}
// MARK: UpdateUI
func updateUI() {
assert(game.cards.count > 0, "No Cards")
if status == GameIs.Paused {return}
removeAllCards()
PlayingCardViews.removeAll(keepCapacity: false)
var scaleFactor:CGFloat = 0.8
var upOffset:CGFloat = 0.0
var cardsLeft = 0
// create spritenotes for all 52 cards
for i in 0..<game.cards.count {
let card = game.cardAtIndex(i)
// all cards until cardPositions.count face up. the rest on the stack
var (x,y) = (7,6)
if i<cardPositions.count {
(x,y) = cardPositions[i]
}
// determine real position from the grid information
let xPos:CGFloat = realXForPositionX(x)
let yPos:CGFloat = realYForPositionY(y)
let image = backgroundImageForCard(card)
// we save the currents positon in the Model
card.positionGrid = (x,y)
let cardSprite = PlayingCardView(imageNamed: backgroundImageForCard(card), cardIndex:i)
PlayingCardViews.append(cardSprite)
if !card.removed {
cardSprite.position = CGPointMake(realXForPositionX(x),realYForPositionY(y))
cardLayer.addChild(cardSprite)
++cardsLeft
}
}
if cardsLeft == 0 { gameOver(0, timeLeft: secondsLeft) }
}
동시에 화면에 52 개의 스프라이트를 표시 할 수 있어야하지만, 실제로 수행하는 작업에 따라 다릅니다. 장면이로드 될 때 처음부터 성능 문제가 시작됩니까? 또한 얼마나 많은 메모리를 사용하고 있습니까? –
예, 처음부터 시작됩니다. 나는 아무 것도하지 않는다. 그냥 터치 이벤트를 기다리고 있습니다. 메모리는 약 100MB입니다 –
어디에서 updateUI() 메서드를 호출합니까? 화면에 많은 노드가 표시됩니까? – ZeMoon