2010-07-21 5 views
0

나는 처음에는 0 인 정수를 가지고 계산 후 종종 0에서 99까지 끝난다. 문제는 게임의 초기부터 0 또는 1로 자주 숫자 값 대신 TrueClass 또는 FalseClass로 할당되어 향후 x> 0 비교를 엉망으로 만듭니다. 변수가 Fixnum/Integer 타입이되도록 내장 된 Ruby 방식이 있습니까? 아니면 그것을 monkeypatch해야합니까?루비 : 부울 위에 Integer (Fixnum/Bignum) 강제 실행

10 단계 : I 변수 형 문제로 실행 경우 마지막 줄은 대상의 마법 방어 승수

mdef_multi = self.mdef_multi 

# Step 11: Modify the Magic Defense Multiplier 
# If Toad 
mdef_multi = 0 if user.states.include?(11) 
# If Charging 
mdef_multi = 0 if user.states.include?(30) 
# If cast on self or PC onto PC 
# 0 if PC targetting PC 
mdef_multi = self.is_a?(Game_Actor) and user.is_a?(Game_Actor) ? 0 : mdef_multi 
# 99 MDef Multi if max MDef 
mdef_multi = self.is_a?(Game_Enemy) and mdef == 255 ? 99 : mdef_multi 
# If Solo Multiplier is enabled 
mdef_multi = obj.element_set.include?(26) ? 1 : mdef_multi 

# Step 12: Modify the Spell Multiplier 
hits = 0, missed = 0, evaded = 0 
while spl_multi > 0 
    spl_multi -= 1 
    if rand(99) <= hit 
    if mdef_multi > 0 

를 계산 여기

는가 적용되는 코드입니다. 기술적으로 RPG Maker VX의 RGSS2입니다. 그리고 제발 내 무시 무시한 주석 및 코딩 스타일을 변명하십시오. 귀하의 정수가 부울로 변환하기되지 않도록 대신 0 또는 1

을 때문에 모든

답변

4

먼저, 루비 무슨 일이 일어나고, 일을 자동 변환하지 않습니다 것은 라인

mdef_multi = self.is_a?(Game_Actor) and user.is_a?(Game_Actor) ? 0 : mdef_multi 
에게 있습니다

는 방식 때문에 and 작품의

(mdef_multi = self.is_a?(Game_Actor)) and user.is_a?(Game_Actor) ? 0 : mdef_multi 

로 분석되고있다. 기본적으로 =and보다 높은 우선 순위를 가지므로 변수는 true/false 값인 and보다 먼저 결과로 설정됩니다. &&=보다 우선 순위가 높으므로 &&을 사용하면됩니다. 이러한 이유 때문에 일부 Ruby 프로그래머는 &&을 사용하지 말 것을 권장하며 결코 and을 사용하지 않는 것이 좋습니다. 자세한 내용은 http://blog.jayfields.com/2007/08/ruby-operator-precedence-of-and-which.html을 참조하십시오.

이 줄에 and 대신 &&을 사용하면 문제가 해결됩니다.

+0

아, 알겠습니다. 굉장해. 무리 감사. –

관련 문제