질문과 답변

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 12448
RMXP [RMXP]액터 이동 금지 2 /여우비/ 2013.07.31 648
RMXP 파일로드가 안돼요; 5 file 따싯 2013.02.23 648
RMXP 스크립트로 화면상에 해당 변수 띄우는법 알중: 2013.07.05 648
RMXP 각 맵에 지정된 나무나 집같은 꾸미기 아이템은 그 맵에서 밖에 이용 못하나요? 1 세비 2013.11.22 647
RMXP 이동경로설정중 @event_id 사용 2 조석진 2013.05.30 646
RMXP 한번 대화하면여 음악나오고요 1 SAO(키리토) 2014.02.14 646
RMXP 아방스님~^^밑에 extraction finshed 관련 질문 입니다. 1 짱구야 2010.12.10 644
RMXP 다운받은 이벤트 말인데요-_- 1 RPGxp를 배우고파 2010.10.06 643
RMXP 캐릭터만들기 1 c4565d 2011.01.07 643
RMXP 메뉴에서 장비,스킬 지울 경우 스크립트 오류 1 펜슬 2011.02.16 642
RMXP 도트는 만들었는데요... 이걸 맵칩 하나로 전부 통합하고 싶은데 특별히 만드는 방법이나 요령을 모르겠네요;;; 1 후후헤헤hh 2014.09.21 642
RMXP 메인화면 만드는 법 1 게이머 2011.01.10 641
RMXP 꽃을 든 요플레 게임에 쓴 메뉴! 3 ungcul815 2011.02.01 641
RMXP 스크립트 함수처리(?) 관련 질문 6 Lighna 2012.12.19 641
RMXP RPG XP질문 1 니키 2010.09.30 640
RMXP 텐트를통과해요 3 2014.02.04 638
RMXP 스크립트 액알에서 공격범위는 설정못하나요? 1 질풍처럼 2010.12.05 635
RMXP 스크립트 용어 난언제클런지 2010.11.19 634
RMXP 오니질문. 3 무리군 2011.01.14 634
RMXP 넷플레이1.7문제 난초보자 2011.01.07 633
Board Pagination Prev 1 ... 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 ... 90 Next
/ 90

[개인정보취급방침]