그래서 저는 최근에 캔버스에 들어가서 간단한 게임을 만들어 놀아보기로했습니다.HTML 캔버스 용 자바 스크립트는 파이어 폭스에서 작동하지만 크롬에서는 작동하지 않습니다.
그러나 크롬에서는 작동하지 않지만 파이어 폭스에서는 작동합니다. 이 게임은 매우 간단한 RTS로되어 있습니다. 상자를 선택하면 마우스 오른쪽 단추로 클릭 할 때 상자를 한 지점에서 다른 지점으로 이동할 수 있습니다.
이것은 파이어 폭스에서 작동합니다. 그러나 크롬에서는 상자를 그으나 클릭을 등록하지 않습니다 (상자를 선택하거나 이동할 수 없음). 또한 크롬에서는 아무 것도 방화범 콘솔에 나타나지 않습니다. 관련성이있는 경우 xampp에서 스크립트를 실행하고 있습니다.
편집 : 하, 미안 해요. 나는 정직하게 어디에서 전에 시작해야하는지 알지 않았다. 그래서 나는 모든 것을 올렸다. 위의 코드를 가져 와서 아래의 훨씬 더 짧은 버전으로 바 꾸었습니다. 또한 형식을
EDIT2 편집 : 위의 코드는 마우스 기능을 처리
/*Game mouse controls*/
_screen.mousemove(function(e){
var playerUnitHover = _game.onUnit(playerUnits, e),
enemyUnitHover = _game.onUnit(enemyUnits, e);
if(typeof(playerUnitHover)=='number') _screen.css('cursor','pointer');
if(typeof(enemyUnitHover)=='number') _screen.css('cursor','not-allowed');
});
더 코드 아래 좁혀. 문제가 발생할 수있는 곳입니다. 불 덩어리 크롬에서는 콘솔에 표시 할 변수를 얻을 수 있지만 커서가 상자 위에있을 때 등록하지 못합니다. 아래 함수는이를 처리합니다.
/*If mouse coordinates are ontop of unit, then return index of that unit from supplied array argument*/
this.onUnit = function(array,e){
var numOfUnits = array.length,
mouseOffsetX = e.pageX - offsetX,
mouseOffsetY = e.pageY - offsetY;
for(var i = 0; i < numOfUnits; i++){
var unit = array[i],
xRange = mouseOffsetX > unit.x && (unit.x+unit.width) > mouseOffsetX,
yRange = mouseOffsetY > unit.y && (unit.y+unit.height) > mouseOffsetY;
if (xRange && yRange){
return i;
}
if(!xRange || !yRange) _screen.css('cursor','crosshair');
}
}
내 눈 – ajax333221
너무 많은 코드를 출혈 시작 문제 영역에 그것을 아래로 편집 :이 같은 stylePadding 캔버스 '를 얻을 수 있습니다. –
작은 예제를 보여줄 수 있습니까? 크롬에서 마우스 클릭에 대한 올바른 좌표를 얻습니까? – Jonas