我正在尝试制作一款小游戏,其目的是将棋子正确地放在棋盘上。 以下代码能够记录错误"在正确的时间到控制台,但它不会返回' 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);
为什么这不起作用的任何想法,还是有更好的解决方案?
编辑:以下内容基于克里斯的答案,它可能非常笨重,但它确实有效。
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);
答案 0 :(得分:0)
你需要返回" snapback"来自onDrop函数。在您发布的代码中,您已经发布了" snapback"来自另一个函数(由$ .each调用的函数)。
查看Example 4004和Example 4005了解如何使用onDrop。
答案 1 :(得分:0)
onDrop函数允许您返回字符串“ trash”以将棋子从板上移除,或者使用“ snapback”将棋子返回至其最初拖动的正方形。 在代码中,您将从$ .each返回“快照”回到onDrop函数的范围。 警告:我还发现,如果您使onDrop成为异步函数,则将无法正常工作(例如,在提升pawn时,您可能希望使用异步方法来显示模式以选择要提升为的片段)。