2012-11-22 15 views
0

我想製作一個動畫精靈四處走動。因此,我使用一個精靈表單來處理角色的所有動作,並通過不同的動畫階段進行動畫製作。Canvas sprite動畫在iPhone/Safari和Chrome上部分隱藏,但在Firefox上可以使用

一切正常,在PC上使用Firefox,但與Chrome和iPhone上的動畫被部分損壞。你可以在這裏測試它在PC http://fiddle.jshell.net/WnjB6/48/

和iphone直接去這裏: http://fiddle.jshell.net/WnjB6/48/show/

我發現沒有被動畫過程中只顯示在iPhone上的spritesheet的第二列。使用較小的spritesheet這是工作。看到這裏

PC http://jsfiddle.net/WnjB6/7/

iphone http://jsfiddle.net/WnjB6/7/show

是否有iPhone上的文件大小的限制或Chrome如何處理圖像?

這裏是源

var canvas = document.getElementById('canvas'); 
var context = canvas.getContext('2d'); 

// Constructor for an animation object 
// image: graphics source 
// x, y: position to draw the animation 
// width, height: size of each tile 
// htiles: number of tiles horizontally in the image source 
var Animation = function(image, x, y, width, height, htiles) { 
    this.image = image; 
    this.x = x; 
    this.y = y; 
    this.width = width; 
    this.height = height; 
    this.htiles = htiles; 
    this.animations = {}; 
    this.currentAnimation = [0]; 
    this.currentFrame = 0; 
} 

// Add animation to the object 
Animation.prototype.add = function(name, frames) { 
    this.animations[name] = frames; 
}; 

// Select animation by name 
Animation.prototype.play = function(name) { 
    this.currentAnimation = this.animations[name]; 
    this.currentFrame = 0; 
}; 

// Advance animation, and draw the tile 
Animation.prototype.nextFrame = function() { 
    // Move to next frame in current animation 
    this.currentFrame = (this.currentFrame + 1) % this.currentAnimation.length; 
    // Extract which image tile that is 
    var tile = this.currentAnimation[this.currentFrame]; 
    this.drawTile(tile); 
}; 

// Draw the given tile at the current position 
Animation.prototype.drawTile = function(tile) { 
    // Clear region we are going to draw on 
    context.clearRect(this.x, this.y, this.width, this.height); 
    context.drawImage(this.image, (tile % this.htiles) * this.width, Math.floor(tile/this.htiles) * this.height, this.width, this.height, this.x, this.y, this.width, this.height); 
}; 

// Initialize the animation 
var image = new Image(); 
image.src = 'http://www.playa.cc/pic/playerstant.png'; 

var player1 = new Animation(image, 0, 0, 51, 51, 2); 
var aniStates = ['stand', 'right', 'walk']; 
player1.add(aniStates[0], [65, 67, 69, 71, 73, 75, 77, 79]); 
player1.add(aniStates[1], [0, 2, 4, 6, 8, 10, 12, 14, 16]); 
player1.add(aniStates[2], [72, 74, 76, 78, 1, 3, 5, 7, 9]); 


// Start with the walking animation, and start animating 
player1.play(aniStates[0]); 
var interval = setInterval(function() { 
    player1.nextFrame(); 
}, 200); 

// Toggle animation between standing and walking every 3 seconds 
var mode = 0; 
setInterval(function() { 
    player1.play(aniStates[mode++]); 
    mode = mode % aniStates.length; 
}, 3000); 

感謝 STOT

回答

1

爲了給出一個簡短的回答很長的問題:

Chrome和Safari瀏覽器在iPhone上不顯示在畫布上的圖像時,削波部分不在原始圖像中。例如,您的圖像的尺寸爲x:100,y:100,您可以使用

context.drawImage(image,0,0,101/* error * /,100,0,0,100,100 )

也看到drawImage spec

相關問題