그래서 문제는 내가 배경을 먼저 그릴 수 없으며 배경 위에 다른 모든 것을 그립니다. 내 코드의 일부 위치 (루프 함수에서)에서는 작동하지만 내 초기화 함수에서는 그렇지 않습니다.javascript : 캔버스의 이미지 그리기 (배경)
// var img = new Image();
// img.src = 'client/img/spaceship.jpg';
// ctx.drawImage(img,0,0);
Img('spaceship',ctx);
drawGrayzonePlanets(ctx,serverObjects);
:
가, 지금 내 초기화 함수에서이 같은 위의 코드를
function imgImport(imgName,ctx){
var img = new Image();
img.onload = function(){
ctx.drawImage(img,0,0);
};
img.src = 'client/img/' + imgName + '.jpg';
}
module.exports = imgImport;
멋진 사용 배경 IMG를 얻고 그것을 그리기위한
코드 : 첫 번째 내 코드에 대한 비트 소개
3 개의 주석 처리 된 줄을 지금 당장 생각하지 마십시오. 첫 번째 활성 라인 Img ('우주선', ctx) : nodej를 통해 사용되는 위의 imgImport 함수입니다. DrawGrayzonePlanets 아래 볼 수 있습니다 : 내가 실행하면 지금
function drawObjects(ctx,status){
switch(status.shape){
case "circle":
var status = status.cic;
console.log(status);
ctx.fillStyle = status.color;
ctx.beginPath();
ctx.arc(status.x,status.y,status.planetSize,0,2*Math.PI);
ctx.stroke();
ctx.fill();
break;
}
}
module.exports = drawObjects;
을 :
function drawGrayzonePlanets(ctx,serverObjects){
for(object in serverObjects){
obj = serverObjects[object];
Drawobjects(ctx,obj);
}
}
는 기본적으로 함수는 위의이 같은보고 서버에서 데이터를 가져 와서 행성을 그릴 Drawobjects() 함수를 사용하여 Img() 함수는 처음에는 drawGrayzonePlanets() 함수를 사용하고, 행성은 배경 뒤에 그려져 보이지 않습니다. 명백한 코드의 순서를 변경하면 똑같은 일이 발생합니다. 이제는 3 줄을 주석 처리하고 img() 함수를 outcommenting하여이 문제를 해결할 수있는 방법을 발견했습니다. drawGrayzonePlanets() 함수를 유지하십시오. 이렇게 :
var img = new Image();
img.src = 'client/img/spaceship.jpg';
ctx.drawImage(img,0,0);
//Img('spaceship',ctx);
drawGrayzonePlanets(ctx,serverObjects);
위의 코드가 작동하면 행성이 배경에 그려집니다. 하지만 Img() 함수를 사용하는 것만으로 그 메서드가 작동하는 이유를 이해할 수 없습니다. 아마도 img.onload = function() {}과 관련이 있을지 모르지만 그 이유를 알 수 없습니까?
누군가 실제로 일어나는 일을 설명 할 수 있습니까?
난 아무데도 정의 된'Img' 기능이 표시되지 않는 가장 좋은 방법은 콜백 될 것이다. – bejado
코드 스 니퍼 또는 jsfiddle을 만들 수 있습니까? – imudin07