질문과 답변

Extra Form

@state 라는 해시에 여러 상태이상을 구현하려고 합니다만, 이상하게도 구조적으로 이상한건 느껴지지 않는데 정상적으로 작동되지 않아 여기에 올려봅니다..; ㅡㅜ

 

class Game_Character

 

 

> > initialize


  #State
    @state = {}
    istate = {}
    con  = {}
   
    istate = {
     'time' => 0,
     'degree' => 0}
    
    con  = {
     '출혈' => istate,
     '기절' => istate,
     '독'   => istate,
     '탈진' => istate,
     '다운' => istate,
     '넉백' => istate}
    
    @state = {
     'life' => nil,
     'dead' => nil,
     'con'=> con,
     'con_add'=> con}

 

> > update
     lasc_manager

 

> > lasc_manager    
    #횡스크롤용 방향세팅
    lasc_way
    #각종 State 업데이트
    lasc_state

> >   lasc_state   


      #지속시간 업데이트
        for i in @state['con'].keys
          case
            when @state['con'][i]['time'] > 0
                 @state['con'][i]['time'] -= 1
            when @state['con'][i]['time'] == 0
                if @state['con'][i]['degree'] > 0
                 @state['con'][i]['degree'] = 0
                end
          end
        end
       #정보 업데이트
        for i in @state['con'].keys
          if @state['con_add'][i]['degree'] > 0
            case
              when @state['con'][i]['degree'] > 0
                if @state['con_add'][i]['degree'] > @state['con'][i]['degree']
                  @state['con'][i]['degree'] = @state['con_add'][i]['degree']
                  @state['con'][i]['time'] += @state['con_add'][i]['time']*(
                  @state['con_add'][i]['degree']/((@state['con_add'][i]['degree']+@state['con'][i]['degree'])/2).to_i)

                elsif @state['con_add'][i]['degree'] <= @state['con'][i]['degree']
                  @state['con'][i]['time'] += @state['con_add'][i]['time']*(
                  @state['con'][i]['degree']/((@state['con_add'][i]['degree']+@state['con'][i]['degree'])/2).to_i)
                end
              when @state['con'][i]['degree'] == 0
                @state['con'][i]['time'] = @state['con_add'][i]['time']
                @state['con'][i]['degree'] = @state['con_add'][i]['degree']
                 
            end
            @state['con_add'][i]['degree'] = 0
            @state['con_add'][i]['time'] = 0
          end
        end
      #상태 효과
      case
        #●
        when @state['con']['출혈']['time'] > 0
          @hp -= @state['con']['출혈']['degree']
        #●
        when @state['con']['기절']['time'] > 0
          @active_manage['attack_take'] = false
          @active_manage['move'] = false
          if @state['con']['기절']['time'] <= 1
            @active_manage['attack_take'] = true
            @active_manage['move'] = true
          end
        #●
        when @state['con']['넉백']['time'] > 0
            pn('넉백')
          r = (@way == 'R'? 1 : -1)
                p '4'
          if @way == 'R'# R 6 L 4
            for i in 0..@state['con']['넉백']['degree']
                p 'a'
              if !passable?(@x-i,@y,4)
                moveto(@x-i+1,@y,4)
                p 'o'
                break
              end
            end
          else
            for i in 0..@state['con']['넉백']['degree']
              if !passable?(@x+i,@y,6)
                moveto(@x+i-1,@y,6)
                break
              end
            end
          end
        end

.

.

.

.이런식으로 되어있습니다만, 작동하지 않습니다 ㅠ

 

@state['con_add']['넉백']['time']=200;@state['con_add']['넉백']['degree']=2

라고 해놓으면,  넉백이라는 해시키뿐만 아니라 다른 키들도 전부 위와같은 값으로 바뀌며,

얼마정도 지나면 전부 0으로 되돌아가 버립니다.

 

어느부분이 잘못된건지... 미치겠습니다 ㅠ 저에게 구원의 손길을 ㅠㅠㅠㅠ.........

 

 

Who's Lighna

profile

스트레스 받는다.

Comment '6'
  • ?
    허걱 2012.12.19 20:24

    루비에서 >> 이런 표현이 있었나요?? 아무튼...
    스크립트 전반을 본건 아니지만...
    위에서 @state 내부의
    'con' 과 'con_add' 의 con 을 같은걸로 정해준게 맞는건가요?

    만약 'con' 과 'con_add' 의 con 을 다른 해시로 나타내고 싶었다면 그냥 {} 라고 해주시기 바랍니다.
    해시가 변수에 대입된 후에 'con', 'con_add' 같은 변수에, con 이라는 변수로 대입하려고 하면 새로 생성되는게 아니라 같은 con을 가리키기만 할 뿐입니다. (포인터와 같은 기능입니다.)
    그래서 'con_add' 에서 바꿔주면 'con' 도 바뀐걸 볼 수밖에 없게되죠.

    a = {}
    b = a
    c = a
    했을 때, b, c 는 하나의 a를 공유하게 됩니다.
    (p b.object_id, c.object_id #=> 27491596, 27491596 등과 같이 같은 오브젝트를 나타냄.)

    아마 이 부분 때문에 원하는 결과를 못얻은듯 보여서 일단 한마디 끄적여 봅니다..@_@

  • profile
    Lighna 2012.12.19 20:29
    ........! 그랬군요......이럴수가 ㅠㅠ
  • ?
    허걱 2012.12.19 20:33

    Ruby 언어가 해시 뿐이 아니라 배열이나 클래스등, 여러 변수의 모음이 될 수 있는 구조라면 주소만 할당되는듯 하더군요..@_@;

    필요하다면, object.dup 혹은 object.clone 등을 활용해 보시기 바랍니다.

  • profile
    Lighna 2012.12.19 21:43
    #State
    @state = {}
    istate = []
    con = []

    istate = ['time','degree'}

    con = ['출혈','기절','독','탈진','다운','넉백']

    @state = {
    'life' => nil,
    'dead' => nil,
    'con'=> nil,
    'con_add'=> nil}
    for i in con
    @state['con'][i]={}
    @state['con_add'][i]={}
    end
    for i in con
    for n in istate
    @state['con'][i][n]=0
    @state['con_add'][i][n]=0
    end
    end

    그럼 이렇게하면 위와같은 일은 일어나지 않겠죠..?
  • ?
    허걱 2012.12.19 21:53
    오타는 무시하고... 오류는 잡힐듯 보이네요.
    덤으로 함수를 만들어서 사용하면 더 편리합니다...라고 말하고 싶네요..^^;
  • profile
    Lighna 2012.12.19 22:06
    감사합니다~

List of Articles
종류 분류 제목 글쓴이 날짜 조회 수
공지 묻고 답하기 가이드 습작 2014.06.14 12392
RMVXA 메뉴창 커맨드로 장소이동(또는 커먼이벤트 실행) 2 난현이라는 2012.12.22 1148
RMXP 전투 도중에 몇턴지나면 캐릭터가 아무것도 안해요. 3 닉넴크 2012.12.22 762
RMVX 플레이어가 일정범위내에 들어오면 인식하는방법 4 아아이이 2012.12.21 824
한글이 깨집니다 12 file IZEN 2012.12.21 1909
RMVXA RPGVX ACE툴로 멀티플레이 게임만들기!! 8 카로 2012.12.21 2483
Visual Novel 바실리어트에서 선택지 사용지 붉은 막대 길이 줄이기 3 file 하늘바라KSND 2012.12.21 1308
RMVXA 광역 공격시 데미지 팝업을 한번에 동시에 ~ 하고 싶습니다. 로브남 2012.12.21 953
RMVXA vx ace에서 4방향 통행 2 하얀너울 2012.12.20 1088
RMVXA '(번역) 선택지에서 \를 사용시 공백발생현상 해결' 스크립트를 찾습니다. 3 카로 2012.12.20 877
RMVXA VX ACE는 키 입력이 없나요? 3 비비드 2012.12.20 850
RMXP 턴알피지에서 맨손으로 때릴 때 타격음 집어넣는 방법. 2 아미상 2012.12.20 760
RMXP 스크립트 함수처리(?) 관련 질문 6 Lighna 2012.12.19 641
RMVX 커먼이벤트로 병렬처리 많이해놓으면 랙걸리나요 4 Promise 2012.12.18 1381
RMVXA 전투 끝난후 자동으로 전투 종료 2 담먹캐 2012.12.17 629
RMVXA ace Animated Battle 스킬 2 카오삼스12 2012.12.17 664
RMXP 이런 현상은 도대체 왜 일어나는거죠? 5 file 초록곰돌이 2012.12.17 719
RMXP 몬스터 랑 장 만들때 1 상큼한똥 2012.12.17 703
기타 제가 게임 대사를 수정하려고 하는데 1 2012.12.17 707
RMVXA 게임 스킬 지정키 설정 (수정) 2 xzrjs 2012.12.16 618
RMVX 대화창에 이름이 뜨게 하는방법이 궁금합니다 4 아아이이 2012.12.16 919
Board Pagination Prev 1 ... 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 ... 516 Next
/ 516

[개인정보취급방침]