이미지 추가를 위해 HTML5 Canvas Kinteticjs tutorial을 사용하고있었습니다. 여러 이미지를 추가하고 레이어를 추가하고 싶습니다.
아래 예제에는 두 개의 이미지가 있지만 두 이미지는 동일합니다.Kineticjs로 캔버스에 여러 이미지 추가
질문 : 어떻게 2 개의 다른 이미지를로드합니까?
이미지 추가를 위해 HTML5 Canvas Kinteticjs tutorial을 사용하고있었습니다. 여러 이미지를 추가하고 레이어를 추가하고 싶습니다.
아래 예제에는 두 개의 이미지가 있지만 두 이미지는 동일합니다.Kineticjs로 캔버스에 여러 이미지 추가
질문 : 어떻게 2 개의 다른 이미지를로드합니까?
하나가 아닌 두 개의 이미지 객체를 만들어야하며 둘 다로드 할 때 두 이미지를 모두 캔버스에 배치 할 수 있습니다.
var imgObj1 = new Image();
var imgObj2 = new Image();
var loadCount = 0;
imgObj1.onload = function() {
loadCount++;
if(loadCount==2) putOnCanvas();
};
imgObj2.onload = function() {
loadCount++;
if(loadCount==2) putOnCanvas();
};
imgObj1.src = ".....";
imgObj2.src = ".....";
function putOnCanvas() {
var yoda = new Kinetic.Image({
x: 140,
y: stage.getHeight()/2 - 59,
image: imageObj1,
width: 106,
height: 118
});
var filteredYoda = new Kinetic.Image({
x: 320,
y: stage.getHeight()/2 - 59,
image: imageObj2,
width: 106,
height: 118
});
// add the shape to the layer
layer.add(yoda);
layer.add(filteredYoda);
// add the layer to the stage
stage.add(layer);
// apply grayscale filter to second image
filteredYoda.applyFilter(Kinetic.Filters.Grayscale, null, function() {
layer.draw();
});
}
이미 알고 계시 겠지만 Image는 KineticJS 개체가 아니라 Kinetic.Image입니다.
Image와 Kinetic.Image 사이에 일대일 연결을 설정하는 한 괜찮습니다.
html5canvastutorials.com의 예제는 Image.onload 함수를 사용하여 Kinetic.Image를 만듭니다. 이것은 많은 사람들을 혼란스럽게합니다. 그러나 이미지를 미리로드 할 필요는 없습니다.
이미지가로드 될 때 Kinetic.Image를 만드는 목적은 캔버스에 유효하지 않은 (깨진) 이미지가없는 것입니다. 따라서 이미지를 모두 유효하게 만들면 이미지를 미리로드하면 image.onload를 사용할 필요가 없어 혼란 스럽습니다. iamges를 미리로드
,
더 웅변적인 방법이 있습니까? 게임을 만들고 모든 이미지를로드해야한다고 가정 해보십시오. 이 방법을 사용하면 onload 함수 만 수백 줄까지 처리 할 수 있습니다. – codepushr
모든 Image 객체에 대해 "imageObj.onload = function() {stage.batchDraw();}"와 같은 작업을 수행 할 수 있지만 이미지가 완전히로드 될 때까지 빈 이미지가 렌더링됩니다. 가장 좋은 해결책은 모든 것을 사전로드하거나 사물을 처리하는 일종의 래퍼를 만드는 것입니다. 게임이라면 항상 이미지를 다시로드하지 않아도됩니다. 너무 느려질 것입니다. – Dalius