나는 지난 3 시간 동안이 문제를 해킹 해왔고 어디서 잘못되었는지 파악할 수 없습니다. 기본적으로, 나는 작은 게임을위한 타일 기반의 "레벨"을 그리려하고있다. 캔버스가 이미 이해하고있는 것처럼, 캔버스는 이미 그려져있는 사각형에 새로운 사각형을 그려야합니다.HTML5 Canvas - 이전에 그려진 사각형을 겹쳐서 만든 게임 레벨 그리기
기본적으로 배경을 그리는 기능과 그 위에 하이라이트를 그리는 또 다른 기능이 있도록 설정하고 싶습니다. "하이라이트"는 벽의 상단이고, 배경은 벽의 측면을 보여줍니다. 하이라이트는 맨 위에 그려야합니다. 이상적으로는 캐릭터 사이에 하이라이트가 그려지기 때문에 (배경이 벽 뒤에있는 것처럼) 배경이 캐릭터 뒤에 있기 때문에 결국에는 그 사이에 인물을 그리기를 원하기 때문입니다.
(하이라이트 층 제외) 수준의 배경과 형태는 다음과 같습니다 http://howtivity.com/leveldrawing 어떤 이유
, 나는 하이라이트 층을 끌기 위해 노력하고 많은 문제로 실행합니다. 3 차원 벽의 느낌을주기 위해 배경 레이어 위에 레이어 50px를 오프셋하고 배경이 여전히 보이도록 벽이없는 곳의 빈 공간을 원합니다. 유일한 차이점은 레이어를 50px 위쪽으로 오프셋하고 노 벽 fillStyle을 투명하게 설정하는 거의 동일한 기능으로 레이어를 그리려고하면 다음과 같이 보입니다. http://howtivity.com/leveldrawing/highlight.html
텍스트를 이렇게 인쇄하도록 설정했습니다. 틀린 부분을 진단 할 수는 있지만 텍스트가 올바르게 표시되었습니다. 캔버스가 그려지는 방식을 잘못 이해 한 것 같아요. 아니면 그냥 보지 못하는 어떤 종류의 실수를 저질렀습니다.
<canvas height="600" width="1000" style="position: absolute; z-index: 0; background: transparent;" id="background">
</canvas>
<script>
var level =
[
[1,1,1,1,1,1,1,1,1,1],
[1,0,0,0,0,0,0,1,0,0],
[1,0,1,0,1,1,0,1,0,1],
[0,0,0,0,0,1,0,0,0,1],
[1,0,0,0,0,0,0,1,1,1],
[1,1,1,1,1,1,1,1,1,1]
];
var bg = document.getElementById("background");
var bgContext = bg.getContext("2d");
var drawLevel = function() {
var levelDrawX = 0;
var levelDrawY = 0;
for (levelRow = 0; levelRow < 6; levelRow++)
{
for (levelCol = 0; levelCol < 10; levelCol++)
{
levelDrawX = (100 * levelCol);
if (level[levelRow][levelCol]==1)
{
bgContext.fillStyle = "#ffe680";
bgContext.fillRect(levelDrawX, levelDrawY, levelDrawX + 100, levelDrawY + 100);
} else {
bgContext.fillStyle = "#8dd35f";
bgContext.fillRect(levelDrawX, levelDrawY, levelDrawX + 100, levelDrawY + 100);
}
}
levelDrawY += 100;
}
};
var drawHighlights = function() {
var levelDrawX = 0;
var levelDrawY = 0;
for (levelRow = 0; levelRow < 6; levelRow++)
{
for (levelCol = 0; levelCol < 10; levelCol++)
{
levelDrawX = (100 * levelCol);
if (level[levelRow][levelCol]==1)
{
bgContext.fillStyle = "#000";
} else {
bgContext.fillStyle = "transparent";
}
bgContext.fillRect(levelDrawX, levelDrawY-50, levelDrawX+100, levelDrawY+50);
}
levelDrawY += 100;
}
};
drawLevel();
drawHighlights();
모든 도움을 주시면 감사하겠습니다. 고맙습니다!
감사합니다! 그건 사실이야 ... 나는 그것을 예제에 따라 고칠 것이다. 하지만, 나는 여전히 두 사람이 정확하게 그려내는 데 어려움을 겪고있다. drawHighlight의 색이 "transparent"로 설정되면 투명한 공백을 [2] [2] 단계에서 그리지 않습니다. 나는 작업 데모를 업로드 할 것이다. –
다음은 작동하는 데모입니다. http://howtivity.com/leveldrawing/ –
다시 한 번 설명 드리지만 미안하지만 분명히 설명하지 않았습니다. 아니, 나는 반투명 그림자를 추가하려하지 않고있다. 본질적으로 배경을 그리고 그 위에 또 다른 "하이라이트"레이어를 오버레이하고 싶습니다. 위에서 볼 경우 하이라이트는 벽의 상단이되며 배경은 벽의 측면이됩니다. 나는 3 차원의 환영을주기 위해 그림자의 상단보다 50px 높은 부분을 오프셋하고 싶습니다.http://howtivity.com/leveldrawing –