在检查棋子位置时,chessboard.js无法为onDrop返回snapback

时间:2014-04-08 05:38:16

标签: javascript jquery chessboard.js

我正在尝试制作一款小游戏,其目的是将棋子正确地放在棋盘上。 以下代码能够记录错误"在正确的时间到控制台,但它不会返回' snapback' to onDrop是预期的行为。

var setup1 = ChessBoard.fenToObj('rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR');
var onDrop = function(source, target, piece, newPos, oldPos, orientation) {

$.each( setup1, function( key, value ) {
if (target == key && piece !== value) {
console.log("wrong")
return 'snapback'
}

});

};

var cfg = {
  draggable: true,
  dropOffBoard: 'trash',
  sparePieces: true,
  showErrors: 'console',
  onDrop: onDrop,
};
var board = new ChessBoard('board', cfg);

为什么这不起作用的任何想法,还是有更好的解决方案?

  • 编辑包含脚本的整个JS部分

编辑:以下内容基于克里斯的答案,它可能非常笨重,但它确实有效。

var correct = 1
var setup1 = ChessBoard.fenToObj('rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR');
var onDrop = function(source, target, piece, newPos, oldPos, orientation) {
correct = 1

if (target.match(/3|4|5|6/)) {
correct = 0
}

$.each( setup1, function( key, value ) {
if (target == key && piece !== value) {
correct = 0
}

})
if (correct == 0) return 'trash';
};

var cfg = {
  draggable: true,
  dropOffBoard: 'trash',
  sparePieces: true,
  showErrors: 'console',
  onDrop: onDrop,
};
var board = new ChessBoard('board', cfg);

2 个答案:

答案 0 :(得分:0)

你需要返回" snapback"来自onDrop函数。在您发布的代码中,您已经发布了" snapback"来自另一个函数(由$ .each调用的函数)。

查看Example 4004Example 4005了解如何使用onDrop

答案 1 :(得分:0)

onDrop函数允许您返回字符串“ trash”以将棋子从板上移除,或者使用“ snapback”将棋子返回至其最初拖动的正方形。 在代码中,您将从$ .each返回“快照”回到onDrop函数的范围。 警告:我还发现,如果您使onDrop成为异步函数,则将无法正常工作(例如,在提升pawn时,您可能希望使用异步方法来显示模式以选择要提升为的片段)。