我在我的遊戲中出現了一個精靈動畫問題。SpriteKit動畫問題
在下面發佈的當前代碼中,精靈將顯示在屏幕上,但不會執行步行動畫;它只是步行週期中圖像之一的靜態幀。
初始化函數:
-(id)initWithSize:(CGSize)size {
if (self = [super initWithSize: size]) {
self.backgroundColor = [SKColor colorWithRed:1.0 green:1.0 blue:1.0 alpha:1.0];
// Create the game nodes
// Background
_backgroundNode = [self createBackgroundNode];
[self addChild: _backgroundNode];
// Foreground
_foregroundNode = [SKNode node];
[self addChild: _foregroundNode];
// Add the Player
_thePlayer = [self createPlayer];
[_foregroundNode addChild:_thePlayer];
[self walkingQueen];
}
return self;
}
功能創建播放器/動畫陣列中的填充:
-(SKSpriteNode *)createPlayer
{
SKSpriteNode *playerNode = [SKSpriteNode node];
//SKSpriteNode *_player = [SKSpriteNode node];
NSMutableArray *walkFrames = [NSMutableArray array];
SKTextureAtlas *queenAnimatedAtlas = [SKTextureAtlas atlasNamed: @"QueenSprites"];
SKTexture *walk1 = [queenAnimatedAtlas textureNamed:@"queen7"];
SKTexture *walk2 = [queenAnimatedAtlas textureNamed:@"queen8"];
SKTexture *walk3 = [queenAnimatedAtlas textureNamed:@"queen9"];
walkFrames[0] = walk1;
walkFrames[1] = walk2;
walkFrames[2] = walk3;
_queenWalkingFrames = walkFrames;
/*
int numImages = 9;
for (int i = 7; i <= numImages; i++) {
NSString *textureName = [NSString stringWithFormat:@"queen%d", i];
SKTexture *temp = [queenAnimatedAtlas textureNamed: textureName];
[walkFrames addObject: temp];
}
*/
//_queenWalkingFrames = walkFrames;
SKTexture *temp = _queenWalkingFrames[0];
SKSpriteNode *_player = [SKSpriteNode spriteNodeWithTexture:temp];
_player.position = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMidY(self.frame));
//[self addChild:_player];
//[self walkingQueen];
[playerNode addChild:_player];
[self walkingQueen];
return playerNode;
}
以及啓動行走動畫功能:
-(void)walkingQueen
{
for (int i = 0; i < _queenWalkingFrames.count; i++) {
if (_queenWalkingFrames[i] == NULL) {
NSLog(@"ERROR!");
}
}
[_thePlayer runAction:[SKAction repeatActionForever:
[SKAction animateWithTextures:_queenWalkingFrames
timePerFrame:0.1f
resize:NO
restore:YES]] withKey:@"walkingInPlaceQueen"];
//return;
}
我如果我忽略圖層的概念(backgro),動畫會起作用und /前景層),並將玩家創建到init函數中(主要考慮createPlayer()中的內容並將其粘貼到initWithSize()中)。
我確實需要爲我的遊戲設置圖層,並且一切看起來都應該起作用;不知道將幾行代碼移入自己的功能塊會產生這樣的問題。 walkingQueen()函數內部的檢查沒有返回任何錯誤,所以我假設我的數組已經填充了精靈圖像。
我嘗試了以下操作:代碼更改了您的建議,並且還刪除了createPlayer()內對walkingQueen()的調用。相反,它是在createPlayer()之後調用的,所以_thePlayer不是零。這兩個似乎並沒有解決問題。 – user1843954