我正在尝试制作一个游戏(俗气,我知道)并且考虑到我对javascript / jquery并不是那么好,我已经设法变得难以切换布尔变量。我尝试了整个var =!var(不知道这意味着什么),但有人推测它只适用于目标C(再次,不知道)。我已经制作了一个JS小提琴http://jsfiddle.net/clarinetking/mLG6c/1/并且它现在可以正常工作但是我想在我的所有对象中添加一个名为'equip'的变量并让它从false开始并在按下正确的按钮时切换为true
var sword = {
nam:'Sword',
atk:5,
def:1,
spd:-1,
type:'LeftH',
//equip = false
};
等
switch ( $(this).attr('id') ) {
case 'equipsword':
atk += sword.atk;
def += sword.def;
spd += sword.spd;
//insert equip switch here
break;
答案 0 :(得分:1)
是的!
在javascript中运行,而不仅仅是C,!
是NOT运算符,它基本上与前面的任何内容相反,所以:
!true === false
!false === true
这也适用于truthy / falsy值:
!null === true
!0 === true
!15 === false
!"" === true
所以要切换一个布尔值,只需使用以下内容:
var sword = {
nam:'Sword',
atk:5,
def:1,
spd:-1,
type:'LeftH',
equip:false
};
switch ( $(this).attr('id') ) {
case 'equipsword':
atk += sword.atk;
def += sword.def;
spd += sword.spd;
sword.equip = !sword.equip;
break;
但是因为来自它的外观的'equipsword'只会在装备时触发,而不是仅仅sword.equip = true;
装备,特别是因为某些其他代码可能会改变其值equip
,然后如果在触发equipsword案例之前运行以下代码,则切换将无法按预期工作:
function someFunctionThatGetsCalled(){
sword.equip = true;
}
它会导致装备成为真,然后当装备剑的情况被触发时,sword.equip将变为假,因为它使用!sword.equip
切换。
答案 1 :(得分:1)
你需要做的不仅仅是!bool在这里,你也想要扭转统计变化。例如:
if (sword.equip) {
atk -= sword.atk;
def -= sword.def;
spd -= sword.spd;
}
else {
atk += sword.atk;
def += sword.def;
spd += sword.spd;
}
sword.equip = !sword.equip;
注意,您可能会重构此代码,因此您不需要switch语句,因为您对每个设备执行的操作是相同的。