2014-03-18 6 views
0

안녕하세요 :) 처음에는 끔찍한 영어에 대해 유감스럽게 생각합니다. 나쁜 영어로 나쁜 프랑스 인이지만, 내 재검토가 이해되기를 바랍니다.타워 방어 자바 스크립트 애니메이션

저는 17 세이며 제 졸업생이었습니다. (대학 졸업자를 아십니까?) 대학을 가기 전에 필자는 컴퓨터 과학에 대한 프로젝트를 가지고 있습니다. 내 프로젝트는 그래픽 방어없이 정말 간단하게 자바 스크립트/Html/CSS에서 타워 방어를 만드는 것입니다. 그래서 내 목표는 내 광장 주위에 x mobs를 산란시키는 것입니다.이 mobs는 타워를 돌진 할 것입니다. 2 mobs가 타워에 있다면, 그녀는 파괴된다, 어떤 타워라도 떠난다면, 게임은 사라진다. 그래서, 이것은 내 코드입니다, 나는 당신에게 코드 후에 질문 할 것입니다. animationBis 작동하지 않는, 기능 애니메이션 테스트했지만 사업부는 바닥에 또는 오른쪽 중앙 블록에있는 경우를 제외하고 animation2 일 :

var canvas = document.getElementById("fenetreJeu"); 
var ctx = canvas.getContext("2d"); 

var mob = document.getElementById("mobile"); 

var fenetreDuJeuHauteur = canvas.height-5; 
var fenetreDuJeuLargeur = canvas.width-5; 

var largeurMobile = mob.offsetLeft; 
var vx = 2; // vitesse en pixel vers la droite 
var xmin = 0; // limite gauche 
var xmax = fenetreDuJeuLargeur; 

var hauteurMobile = mob.offsetTop; //ordonnée du mobile 
var vy= 2; 
var ymin = 0; 
var ymax=fenetreDuJeuHauteur; 

var timer1; 

window.onload = function() 
{ 

    var debut = document.getElementById("start"); 
    var arret = document.getElementById("stop"); 
    var blocCentrale = document.getElementById("blocCentrale"); 
    var tour = document.getElementById("tour"); 


    debut.addEventListener("click",debutPartie); 
    arret.addEventListener("click",pause); 


    quadrillage(); 
    generationMob(); 

    ensembleMob = document.getElementsByClassName("monstre"); 
    ensembleMob[0].style.backgroundColor = "blue"; 



} 
function generationMob() 
{ 
    for(i = 0; i < 10; i++){ 
    creationPositionnement(); 
    } 
} 

function creationPositionnement(){ 

    var ensembleMob = []; 
    var mobCree = document.createElement("div"); 

     mobCree.className = "monstre"; 
     mobCree.style.width = "5px"; 
     mobCree.style.height = "5px"; 
     mobCree.style.backgroundColor = "red"; 
     mobCree.style.position = "absolute"; 
     ensembleMob = document.getElementsByClassName("monstre"); 


    var mobCreeHauteur = mobCree.style.top = Math.floor(Math.random()*595)+"px"; 
    var mobCreeLargeur = mobCree.style.left = Math.floor(Math.random()*595)+"px"; 
    var aleatoirePosition = Math.floor((Math.random()*4)+1); 

    if (aleatoirePosition == 1){ 
     if (mobCreeHauteur != 0){ 
      mobCree.style.left = "0"+"px";} 
    }if (aleatoirePosition == 2){ 
     if (mobCreeLargeur != 0){ 
      mobCree.style.top = "0"+"px";} 
    }if (aleatoirePosition == 3){ 
     if (mobCreeHauteur != 0){ 
      mobCree.style.left = "595"+"px";} 
    }if (aleatoirePosition == 4){ 
     if (mobCreeLargeur != 0){ 
      mobCree.style.top = "595"+"px";} 
    } 
    blocCentrale.appendChild(mobCree); 

    return ensembleMob; 
} 

function positionCurseur() 
{ 


} 

function quadrillage(){ 
    var larg = 50; 
    var haut = 50; 

    for (var i = 0; i < 40;i++){ 
     ctx.beginPath(); 
     ctx.moveTo(larg,0); 
     ctx.lineTo(larg,600); 
     ctx.stroke(); 
     larg +=50; 
    } 

    for (var i = 0; i < 20;i++){ 
     ctx.beginPath(); 
     ctx.moveTo(0,haut); 
     ctx.lineTo(canvas.width,haut); 
     ctx.stroke(); 
     haut +=50; 
    } 
} 

function debutPartie(){ 
    // lance le changement de position tout les 0,01 secondes. 
    clearInterval(timer1); //arrête un éventuel timer déjà en place. 
    timer1 = setInterval(animation2,10); // Lance le déplacement 
} 


function pause(){ 
    clearInterval(timer1); 
} 

var animation = function() { 
    // déplace le mobile de Vx pixels vers la droite et change Vx si on arrive au bord. 
    largeurMobile = largeurMobile + Vx;  
    if ((largeurMobile<=xmin) || (largeurMobile>=xmax)) { 
     Vx=-Vx; // Si on est au bord, on change le sens de déplacement. 
    } 
    mobile.style.left=largeurMobile+"px"; // déplacement de l'objet à l'écran. 

    hauteurMobile = hauteurMobile + Vy;  
    if ((hauteurMobile<=ymin) || (hauteurMobile>=ymax)) { 
     Vy=-Vy; // Si on est au bord, on change le sens de déplacement. 
    } 
    mobile.style.top=hauteurMobile+"px"; // déplacement de l'objet à l'écran. 
} 

function animationBis(){ 

    for (i = 0; i < 10; i++){ 
     ensembleMob[i].style.left = ensembleMob[i].offsetLeft + vy + "px"; 
     if (ensembleMob[i].offsetLeft <= 0 || ensembleMob[i].offsetLeft >= 595){ 
     vx =- vx; 
     } 


     ensembleMob[i].style.top = ensembleMob[i].offsetTop + vx + "px"; 
     if (ensembleMob[i].offsetTop <= 0 || ensembleMob[i].offsetTop >= 595){ 
     vy =- vy; 
     } 

    } 
} 

function animation2(){ 


     ensembleMob[0].style.left = ensembleMob[0].offsetLeft + vy + "px"; 
      if (ensembleMob[0].offsetLeft <= 0 || ensembleMob[0].offsetLeft >= 595){ 
      vy =- vy; 
      } 
     ensembleMob[0].style.top = ensembleMob[0].offsetTop + vx + "px"; 
      if (ensembleMob[0].offsetTop <= 0 || ensembleMob[0].offsetTop >= 595){ 
      vx =- vx; 
      } 


} 

// calculer la position d'un element sur la page 
/*calcul la position d'un élément sur la page 

      var item = document.getElementById(img); 
      var parent = item.offsetParent; 
      var posElmX = 0; 
      var posElmY = 0; 
      while(parent) { 
       posElmX += parent.offsetLeft; 
       posElmY += parent.offsetTop; 
       parent = parent.offsetParent; 
      } 
      var positionX = item.offsetLeft + posElmX; 
      var positionY = item.offsetTop + posElmY; 



changer les dimension d'un élément 

      item.style.width = item.offsetWidth+10+'px'; 
         item.style.height = item.offsetHeight+5+'px'; 
         */ 

는 SOMES 기능, 예에 대한 관리를하지 마십시오.

내 질문은 애니메이션에 관한 것입니다. 테스트입니다.하지만 나중에이 애니메이션의 아이디어가 필요하다고 생각합니다. 작동하지 않습니다. Div (군중)는 이동하지만 다른 구역에 있지만 내 블록 중앙에 있지 않은 것처럼 이상한 이동을합니다. 내 생각에 그것은 내 생애의 vitesse 때문에,하지만 난 잘 모르겠다.

내가 할 수있는 또 다른 질문 : 내가 어떻게 군중 "U 서두 르 (타워에서 자동으로 그 위치에서 타워로 이동)"말할 수 있습니까?

보시다시피, 자바 스크립트의 내 수준은 정말 나쁜와 u는 기능을 나에게 대답을 줄 수 있다면, 그래서 난 단지 기능을 사용하여 내가 내 끔찍한 영어 및 들으 죄송 아직도 여전히

: 선호하여 대답과 인내심으로 나를 읽으십시오.

// Define state variables like so: 
var MOVING_LEFT = 1; 
var MOVING_RIGHT = 2; 
var MOVING_UP = 3; 
var MOVING_DOWN = 4; 

// Use these human-readable variable names to set states 
var current_moving_direction = MOVING_RIGHT; 

// Use these variables to check for the state again 
switch (current_moving_direction){ 
    case MOVING_LEFT: 
    // Execute code for moving left 
    break; 
    case MOVING_RIGHT: 
    // Execute code for moving right 
    break; 
    case MOVING_UP: 
    // Execute code for moving up 
    break; 
    case MOVING_DOWN: 
    // Execute code for moving down 
    break; 
} 

대문자의 변수는 contants 있습니다 : 안녕

+0

jsfiddle/codepen? – bjb568

+0

질문은 언어와 의미 모두에서 매우 분명하지 않습니다. 아이디어보다는 사실을 요구하십시오. Stackoverflow 반복 occourring 문제에 대한 답변을 제공하기로되어 있습니다. 기본 구조를 설정하는 방법에 대한 도움이 필요하면 프로젝트와 함께 할 수있는 사람을 찾는 것이 가장 좋습니다. 문제는 그러한 사람들을 찾을 수있는 곳입니다. 이것을 jsfiddle (jsfiddle.net)에 넣을 수 있다면 정말 도움이 될 것이므로 직접 볼 수 있습니다. – Sam

+0

기본적으로, 우리가 당신을 유니버시티로 데려 오기를 원합니까? –

답변

0

:) 나는 당신이 개 매우 편리한 기술을 사용하는 예를 줄 것이다. 여기에는 자신의 방식대로 관리해야하는 1-4 개의 숫자가 포함되어 있습니다. 그런 식으로, 당신이이 숫자에서 보는 것은 그들이 의미하는 것입니다. 여전히, 당신은 지금 그들에 저장된 번호를 확인할 수 있습니다.

switch-case 문은 각 'case'레이블로 정의 된 모든 상태에 대해 'current_moving_direction'변수를 검사합니다. 일단 '조건'이 맞으면 '중단'은 스위치 케이스를 깨는 데 필요합니다.

+0

나는 시도하고 당신의 도움을 위해 당신에게 내 코드를 보내드립니다 :) – LenweSeregon

관련 문제