2015-02-07 2 views
1

왼쪽을 누르면 왼쪽으로 설정 한 이미지가 표시됩니다. RPG 게임을 만들고 있습니다. 스프라이트 시트를 사용하는 방법을 알 수 없으므로 각 이미지를 개별적으로로드하여 작업을 쉽게 처리했습니다.캔버스에서 키를 눌렀을 때 이미지가 변경되지 않을 수 있습니다.

는 여기에 지금까지이 작업은 다음과 같습니다

<script> 
     function initCanvas(){ 
     var canvas = document.getElementById('my_canvas') 
     var ctx = canvas.getContext('2d'); 

      //Variables 
      var cw = canvas.width; 
      var ch = canvas.height; 
      var x = 20; 
      var y = 20; 
      var width = 40; 
      var height = 40; 


       //---------------- 
       //Char (Spritesheet soon) 
       //---------------- 
        var charup = new Image(); 
        charup.src = "up.png"; 

        var chardown = new Image(); 
        chardown.src = "down.png"; 

        var charleft = new Image(); 
        charleft.src = "left.png"; 

        var charright = new Image(); 
        charright.src = "right.png"; 


       // 
       draw(); //Executes the Draw Function 
       // 

       //------------- 
       //WASD Controls 
       //------------- 
       document.addEventListener("keydown", move, false); 

       function move(event){ 

         if(event.keyCode == 87){ //w 

         ctx.drawImage(charup, x, y, width, height); 
           if(y >= 20){ 
             y-=20; 

           } 
           else if(y < 20){ 
             y = 460; 
           } 
         } 
         if(event.keyCode == 65){ //a 

         ctx.drawImage(charleft, x, y, width, height); 
           if(x >= 20){ 
             x-=20; 
           } 
           else if(x < 20){ 
             x = 460; 
           } 
         } 
         if(event.keyCode == 83){ //s 
         ctx.drawImage(chardown, x, y, width, height); 
           if(y+height <= 490){ 
             y+=20; 
           } 
           else if(y+height > 460){ 
             y = 0; 
           } 
         } 
         if(event.keyCode == 68){ //d 
         ctx.drawImage(charright, x, y, width, height); 
           if(x+width <= 490){ 
             x+=20; 
           } 
           else if(x+width > 490){ 
             x = 0; 
           } 
         } 

        draw(); 

        //Idea for sprite: If press right it goes right and loads a gif while going right... 
        //And when "keyup" or keyrelease or whatever, it stops the animation 
        //Or loads a neutral one facing the same direction. 

      } 

      //-------------- 
      //Draw Function 
      //-------------- 
       function draw(){ 
       //Clears rect for animation purposes 
       ctx.clearRect(0, 0, cw, ch); 

       ctx.fillStyle = "green"; 
         //ctx.fillRect(x, y, 20, 20); 
       ctx.drawImage(chardown, x, y, width, height); 
       } 

     } 

     //------------ 
     //Game Loop 
     //------------ 
    window.addEventListener('load', function(event){ 
     initCanvas(); 
    }); 
    </script> 
+0

관련이없는,하지만 난 조금 루즈 - 같은 - 만들려고 해요 rpg-game-thing 또는 뭔가를 죽일 수있는 작은 RPG ... (또는 뭔가 ...) 그냥 기분이 밝아 지거나 어떻게 든 도움이 될 것이라고 생각했습니다. – Maddoga

+0

일부 코드가 변경되었습니다. 나는 당신이 특정한 조화 속에 있는지를 본 후에 그 인물을 그리도록 만들었습니다 ... 어느 것이 든 그것을 그리기를 원하기 때문에 이것은 잘못된 것입니다. 여전히 작동하지 않지만 주 코드가 업데이트되었습니다. TLDR; 나는 한 줄 또는 2 줄을 움직 였지만 아무것도하지 않았다. – Maddoga

+0

새로운 이미지 변수'var player = new Image()'를 만들고 소스를 빈'player.src = ""'에 넣어보십시오. 다음 작업은 W가 눌러 진 경우입니다 :'player.src = charup.src' 등 모든 버튼 누름에 대해서도 마찬가지입니다. 당신의 드로잉 기능에서 단순히 플레이어 이미지를 그려야합니다 :'ctx.drawImage (player, x, y, width, height); – Niddro

답변

1

문제는 각 무승부에 문자 이미지를 reserts 그리기 기능에있다.

이 솔루션은 캐릭터의 현재 사진을 호스팅 할 새로운 변수를 선언하는 것입니다 :

var imgPlayer = new Image(); 
imgPlayer.src = "down.png"; //This is your default image. 
플레이어 이미지의 소스가 변경되도록

다음 단계는 모든 KeyListener 기능을 변경하는 것입니다 (또한이 기능에서 캐릭터의 모든 그림을 제거합니다). 그래서 같이 : 드로우 기능에

if(event.keyCode == 87){ //w 
    imgPlayer.src = charup.src; 
    //the rest of your code... 
} 

마지막으로, 다음은 대답을 종료 -----

ctx.drawImage(imgPlayer, x, y, width, height); 

을, 아래 다도는 -------를 그냥 재미위한 것입니다

재미있게 놀아 라, 내가 잠시 뒤로 시작했던 미완성의 게임이 여기에있다. http://home.niddro.com/HTML5/supergoose/SuperGoose.html 캐릭터의 발에는 플레이어가 움직일 때 반복되는 3 개의 이미지가 있습니다. 나는 슈퍼 마리오 브라더스 개념에 그 아이디어를 기반으로합니다. 나는 흐린 피트의 두 이미지를 반복하여 정말 빠른 토끼 달렸 another game에서 : Mario 3-part sprite

재미있는 사실이 bunnybunnyfeet1bunnyfeet2

관련 문제