2014-12-19 1 views
-2

화면에서 일종의 과일 파리에서 작업 중이지만 프로그래밍 중입니다. 처음에는 매우 큰 코드를 적었습니다.하지만 뭔가 잘못되었다는 것을 발견했습니다. 과일 파리는 왼쪽으로 움직 였지만 오른쪽으로는 움직이지 않았습니다.다른 스위치가 작동하는 동안 하나의 스위치 조건이 작동하지 않습니다.

case 90: 
    fly.style.marginLeft = (parseInt(left) + sw).toString(); 
break; 

코드 "왼쪽에서 270도까지": "90 개도에서 오른쪽에있는"

코드

case 270: 
    fly.style.marginLeft = (parseInt(left) - sw).toString(); 
break; 

90도는 입니다 하지 작업 270입니다 작동하지만 90은 왜 작동하지 않습니까?

document.body.innerHTML = document.body.innerHTML + "<img id='fly' onclick='hi();' src='http://screen-bug.googlecode.com/git/fruitfly-moving.gif'>"; 
var fly = document.getElementById("fly"); 
var rotation = 0; 
var ramargintop = Math.floor(Math.random() * screen.height); 
var ramarginleft = Math.floor(Math.random() * screen.width); 
fly.style.marginTop = ramargintop; 
fly.style.marginLeft = ramarginleft; 

var interval = setInterval(movefly, 50); 
function movefly(){ 
// rotation += Math.floor((Math.random() * 20) - 9.46); 
    if(rotation < 0){ 
     rotation += 360; 
    }else if(rotation > 360){ 
     rotation -= 360; 
    } 
    fly.style.transform = "rotate(" + rotation + "deg)"; 
    moveflyforward(); 
} 

function moveflyforward(){ 
    var topa = fly.style.marginTop; 
    var left = fly.style.marginLeft; 
    var sw = 0.2; 
    switch(rotation){ 
     case 0: 
      fly.style.marginTop = (parseInt(topa) - sw).toString(); 
     break; 
     case 90: 
      fly.style.marginLeft = (parseInt(left) + sw).toString(); 
     break; 
     case 180: 
      fly.style.marginTop = (parseInt(topa) + sw).toString(); 
     break; 
     case 270: 
      fly.style.marginLeft = (parseInt(left) - sw).toString(); 
     break; 
     case 360: 
      fly.style.marginTop = (parseInt(topa) - sw).toString(); 
     break; 
     default: 
      document.body.innerHTML = "<font color='red' size='30'>Error on fly, please contact [email protected] about this. CODE: MoveForwardSwitch</font>"; 
     break; 
    } 
} 
+4

더 자세한 질문 제목을 사용하십시오. 이것은 모든 질문을 전혀 대표하지 않습니다. – Joeytje50

+0

전체 코드를 게시 할 수 있습니까? 이것은 디버깅하기에 충분하지 않습니다. – Vince

+2

코드는 * 여기에 * 있어야하며 다른 웹 사이트에는 필요하지 않습니다. – isherwood

답변

1

문제는 parseInt

의 사용의이 (sw 0.2)

left 10 가정 할 수 있습니다 : "-"전체 코드 난 단지 "+"다른 것을 볼 0.2 ~ 10을 더하면 다음 실행시 10.2이되고 parseInt은 정수를 반환하기 때문에 left은 다시 10이됩니다 (아무런 반응이 없습니다).

10에서 0.2를 빼면 결과는 9.8이고 다음 실행시 left은 9가됩니다 (원하는 결과도 아님).

parseInt 대신에 parseFloat을 사용하거나 (부동 소수점으로 작업하고 싶을 때) sw을 정수로 설정하십시오. 1

관련 문제