질문과 답변

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 12451
RMXP 전투 도중에 몇턴지나면 캐릭터가 아무것도 안해요. 3 닉넴크 2012.12.22 762
RMXP 턴알피지에서 맨손으로 때릴 때 타격음 집어넣는 방법. 2 아미상 2012.12.20 760
RMXP 스크립트 함수처리(?) 관련 질문 6 Lighna 2012.12.19 641
RMXP 이런 현상은 도대체 왜 일어나는거죠? 5 file 초록곰돌이 2012.12.17 719
RMXP 몬스터 랑 장 만들때 1 상큼한똥 2012.12.17 703
RMXP 스크립트 에디터에서 정해진 수치를 다양하게 변경할수 있는 방법(?)에 관해서 질문합니다 1 브라우니 2012.12.13 846
RMXP 준돌님의 메세지 뛰우기 스크립트 수정좀 도와주세요. 7 브라우니 2012.12.12 782
RMXP 커서(↓)키를 누르고 있지도 않은데, 액터가 혼자 계속 움직입니다. 6 하진 2012.12.10 871
RMXP 선택지 박스 질문 1 file 뮤러 2012.12.09 770
RMXP 일정시간 타이머 작동 1 bluesu1004 2012.12.09 862
RMXP 스크립트에서 Fixnum 형태를 String 형태로 바꾸는 방법 1 겨울별 2012.12.05 703
RMXP 문장에 사진이나 이름 넣기 7 bluesu1004 2012.12.04 842
RMXP 가지고 있던 아이템,스킬,장비 모조리 압수 1 CJYG* 2012.12.02 1136
RMXP 엔딩을 본 다음에 새로 게임을 시작할 때 특정 변수만 보존할 수 있나요? 6 얍얍 2012.11.28 1002
RMXP 아이템 사용에 대한 질문 3 임맹 2012.11.27 923
RMXP 맵이름 스크립트의 표시를 사진표시보다 위로 하려면 어떻게 해야 하나요? 2 file 팥떡 2012.11.26 1000
RMXP 데미지 계산에 대하여... 5 아드니엘 2012.11.25 1076
RMXP rmxp 애니메이션 랙을 줄여주는 스크립트 질문.. Lighna 2012.11.23 768
RMXP xp역전 검사처럼 로직체스 구현중 막힘.. 도와주세요 5 아이리수 2012.11.22 1070
RMXP 스위치 문제 2 오늘밤어때 2012.11.15 689
Board Pagination Prev 1 ... 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 ... 90 Next
/ 90

[개인정보취급방침]