[英]How to compute rotation/scale pivot coordinates for SVG transformations (I'm using Raphael.js)?
[英]I'm using raphael.js for a visual interface on my Battleship game. I'm having some problems
我将raphael.js用作我的战舰游戏的可视界面。 我有一个名为createCanvas()的函数,该函数创建一个网格(10x10)。 这样,用户可以看到瞄准的目标。 问题是,直到游戏代码(输入坐标等)完成后才显示网格。 有人知道如何解决吗?
这是完整的代码 。 下面是createCanvas()和game()的代码。
function createCanvas() {
$(function() {
var canvas = Raphael(0, 0, 2000, 2000);
for(var i = 0; i != (BOARD_WIDTH); i++) {
canvas.text((60+70*i), 15, i+1);
}
for(var i = 0; i != (BOARD_HEIGHT); i++) {
canvas.text(15, (60+70*i), i+1);
}
for(var i = 0; i != (BOARD_WIDTH+1); i++) {
canvas.path( "M" + (25+(70*i)) + ",25 L" + (25 + (70*i)) + ",725" );
}
for(var i = 0; i != (BOARD_HEIGHT+1); i++) {
canvas.path( "M25," + (25+(70*i)) + " L725," + (25+(70*i)) );
}
});
}
function game(){
inputArray = [4,3,2];
var boats = randomBoats(inputArray);
var currentBoat = 0;
var sunkenBoat = 0;
var numberOfTurns = 0;
while(sunkenBoat !== inputArray.length ) {
var hit= false;
var target = "(" + prompt("Enter targetcoordinate (x,y)") + ")";
var targetString = target.replace(/\s+/g, '');
for(var i = 0; i !== inputArray.length; i++) {
for(var j = 0; j !== boats[i].usedPositions().length; j++) {
console.log(targetString)
if(targetString === boats[i].usedPositions()[j].toString()) {
hit = true;
boats[i].hits[j] = 1;
console.log(boats[i].hits);
currentBoat = boats[i];
fillSquare(targetString, "red");
break;
}
}
}
console.log(currentBoat.hits);
console.log(allEquals(currentBoat.hits, 1));
if(hit)
alert ("Hit!");
else {
fillSquare(targetString, "blue");
alert ("Miss!");
}
if(allEquals(currentBoat.hits, 1)) {
alert("Boat with length " + currentBoat.hits.length + " has sunken!");
sunkenBoat++;
}
numberOfTurns++
}
alert("You've won! You did it in " + numberOfTurns + " turns.")
}
在我的代码中,我打电话
createCanvas();
game();
所以我想首先画画布
问题是While循环。 您没有给其他任何机会进入并做任何事情。 这将尽可能快地四处循环,直到完成为止。
您应该在将输入框放在页面上并检测键事件(例如,使用Enter键)时进行检查。
document.onkeypress = function(evt) {
evt = evt || window.event;
var charCode = evt.keyCode || evt.which;
var charStr = String.fromCharCode(charCode);
alert(charStr);
};
这样,您以后需要的动画和其他内容就可以不受阻碍地运行,您不会像疯狂一样消耗CPU周期,并且仅在用户实际输入值时检查命中率
然后,您甚至可以在画布上写一些代码显示“命中”或“小姐”(可能是动画的),这样您就可以删除所有不断弹出的警报和消息框。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.