?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

오브젝트 함정을 만들고, 주인공의 일정 체력 이하가 될경우 경고문을 삽입하는게 목적입니다만, 어째선지 변수가 이상하게 나오더라고요. 

 

가상의 변수 #0001 를 주인공 체력으로 명명 하였습니다.

기본 체력 20이었을 때 가정.

 - - - - 

변수 조작 = 주인공 체력  = 주인공 HP

 

   조건분기 : 주인공 체력 <= 5 

          HP증감 : {주인공 체력}, -4 

          텍스트 : 더 하면 죽을지도 몰라!

 

   그 이외 경우 

          HP 증감  : {주인공 체력}, -4

          텍스트 : 위험하잖아.

 

   분기 종료

변수 조작 : 주인공 체력 -= 4

 

 

- - -  -

 

제가 생각한 알고리즘은 

 

 

첫번째 조작시  주인공 체력 = 주인공 HP 이므로  주인공 체력을  주인공 현재 체력 20에 맞춰서 선언함

첫번째 조작 끝날 시  주인공 체력 = 주인공 체력 -4  

 

 

2번째 = 주인공 현재 체력인 16에 맞춰서 선언 끝날때  -4 했으니 12

3번째 = 12 / 끝날때 8

4번째 = 8   / 끝날때 4

 

5번째 실행할 때 4이하 이므로 조건 충족하여 조건문 실행.

 

 

이렇게 생각하고 있었는데, 알만툴은  첫번째 조작 할 때만 작동을 했는지 16,16,16,16....   고정이 되어버리더라고요.  주인공 체력은 정상적으로 작동 하는데, 변수만 이상합니다.

 

변수 조작 이벤트를 활용하여 주인공 체력이라는 변수를 주인공 HP에 맞추라는 명령문을 썼음에도 왜 주인공 HP에 맞춰서 되지 않고 먹통이 되어버릴까요? 뭘 놓쳤길래 변수가 16 고정이 되는건지...  알만툴에서 이번에 변수를 처음 만져보는데, 이 것 때문에 미치겠어요. 

 

 

P.S 최대체력 아닌거 확인했습니다. 그냥 HP라고 되어 있길래 그걸로 선택 했어요.

 

이런 식입니다.

TAG •
?
  • profile
    천무 2017.04.28 23:10
    주인공의 HP변수대입시 현재량이 아닌 최대량을 대입하신건 아닌지요
  • ?
    참몰랑 2017.04.29 14:05

    아니에요. 적어놨듯이 최대 HP와 HP 있길래 HP를 선택 했습니다. 혹시나 해서 최대 HP 했더니
    체력조차 깎이지 않았어요.

     

    제 생각엔 주인공 HP으로 바꿈 동작이 제대로 된다면 변수 -4 안해도 됐을텐데, 하다하다 안돼서 혹시나 하고 집어 넣어본 것입니다.

  • profile
    lklslel 2017.04.29 14:54
    사용하시는 RPG maker의 종류를 알려주시기

    바랍니다.


    종류마다 사용하는 언어가 같은 것도 있지만,

    다른 경우가 많아서 시스템의 구성방식에

    따라 상당한 차이가 발생할 수 있습니다.


    가능하다면... 해당부분을 스크립트로 변환해서

    보여주시면 안될까요?
  • ?
    참몰랑 2017.04.29 16:09
    전 아직 스크립트를 짤 줄 몰라서 스크립트 구현을 아예 안한 상태입니다.
    그리고 저 오브젝트는 단독 오브젝트라 병렬 처리 그런 것 또한 아니에요.

    증감 처리 부분은 액터 1밖에 존재하지 않는 게임인지라 액터 1를 지정 해보았는데, 변수 또한 16 그대로 되어 있더라고요. 그래서 이러나 저러나 똑같다고 생각 됐습니다.

    태그에 있는 것처럼 MV에요.
  • profile
    lklslel 2017.04.29 15:00
    HP증감 함수 사용부분에 적용할 캐릭터를 지정해야

    정상적으로 적용이 되는 것이 아닌지 한 번 확인해보시기

    바랍니다.
  • profile
    lklslel 2017.04.30 15:58

    가능하시다면 작성하신 이벤트를 분석해볼 수 있게

    게임프로젝트폴더\data\해당 이벤트가 들어있는 맵.json

     

     

    게임프로젝트폴더\data\CommonEvents.json

    파일을 업로드해주실 수 있으시겠습니까?


    이벤트 정보를 기반으로 스크립트 분석을 해본다면

    어떤 문제가 있는지 확실하게 파악할 수 있을 것으로 보입니다.

  • ?
    참몰랑 2017.05.02 00:12 Files첨부 (1)

    해당 맵과 이벤트 압축했습니다. 무슨 문제일까요... ㅜㅜ

  • profile
    lklslel 2017.05.02 16:13
    "code":311,
    "indent":1,
    "parameters":[1,1,1,0,4,true]

    이 부분이 바로 문제의 부분입니다.

    // Game_Interpreter.prototype.command311 실행 시작

    // Change HP
    Game_Interpreter.prototype.command311 = function() {
    var value = this.operateValue(this._params[2], this._params[3], this._params[4]);
    this.iterateActorEx(this._params[0], this._params[1], function(actor) {
    this.changeHp(actor, value, this._params[5]);
    }.bind(this));
    return true;
    };



    this._params = [1,1,1,0,4,true];
    //또는
    //this._params = {};
    //this._params[0] = 1;
    //this._params[1] = 1;
    //this._params[2] = 1;
    //this._params[3] = 0;
    //this._params[4] = 4;
    //this._params[5] = true;


    var value = this.operateValue(1,0,4);


    // Game_Interpreter.prototype.operateValue 실행 시작

    Game_Interpreter.prototype.operateValue = function(operation, operandType, operand) {
    var value = operandType === 0 ? operand : $gameVariables.value(operand);
    return operation === 0 ? value : -value;
    };

    operation = 1
    operandType = 0
    operand = 4

    var value = 0 === 0 ? 4 : $gameVariables.value(4);
    //0 이 0이 맞다면 4, 아니면 4번 변수값
    return 1 === 0 ? 4 : -4;
    // 결과값으로는 operation 값이 1이고, 0과 같지 않기 때문에 value의 값(4)을 음수로 넘겨줍니다

    // Game_Interpreter.prototype.operateValue 실행 끝


    this.iterateActorEx(1,1, function(actor) {
    this.changeHp(actor, -4,true);
    }.bind(this));


    // Game_Interpreter.prototype.iterateActorEx 실행시작

    Game_Interpreter.prototype.iterateActorEx = function(param1, param2, callback) {
    if (param1 === 0) {
    this.iterateActorId(param2, callback);
    } else {
    this.iterateActorId($gameVariables.value(param2), callback);
    }
    };

    param1 = 1;
    param2 = 1;
    callback = function(actor) {
    this.changeHp(actor, -4,true);
    }.bind(this);

    // param1 값이 1이기때문에 else 부분이 실행됩니다.

    if (1 === 0) {
    this.iterateActorId(1, callback);
    } else {
    this.iterateActorId($gameVariables.value(1), callback);
    }

    // Game_Interpreter.prototype.iterateActorId 실행시작

    Game_Interpreter.prototype.iterateActorId = function(param, callback) {
    if (param === 0) {
    $gameParty.members().forEach(callback);
    } else {
    var actor = $gameActors.actor(param);
    if (actor) {
    callback(actor);
    }
    }
    };

    // 주인공의 체력변수에 있는 값이 20이므로 param의 값은 20이 됩니다.

    param = 20;
    callback = function(actor) {
    this.changeHp(actor, -4,true);
    }.bind(this);

    // param 값이 0이 아니기 때문에 else 부분이 실행됩니다.

    if (20 === 0) {
    $gameParty.members().forEach(callback);
    } else {

    // 20번 액터의 정보를 불러옵니다.
    // 하지만 20번 액터가 해당 액터일 경우에는 운 좋게 맞아 떨어지지만
    // 맵 정보를 보게되면 "actorId":1 이라고 조건이 명시가 되어있기 때문에
    // 올바른 액터의 ID가 아니게 됩니다.

    var actor = $gameActors.actor(20);

    // actor의 데이터가 존재한다면 callback(actor)를 실행합니다.

    if (actor) {
    callback(actor);
    }
    }


    결론을 말씀드리자면 HP증감은 직접적으로 액터의

    데이터에 접근하는 방식으로 작성이 되어있기 때문에

    따로 체력변수를 두실 필요가 없고 바로 액터의 정보로

    비교문의 사용과 함수의 사용을 하시면 된다는 겁니다.


    조건분기시 주인공의 체력 변수가 아닌 주인공 자체를

    선택하시고 체력 값으로 지정해주시면 제대로 됩니다.

    그리고 실제 체력 데이터 값을 적용하실 때에도

    주인공을 선택하시고 체력값에 바로 적용시키시면 됩니다.




    정리를 하자면 실제 조건분기까지는 실행이 되었지만

    변수가 가르키고 있던 체력의 데이터를 액터의 ID로

    잘못 접근하여 조작하려고 했던 것이 문제였습니다.

    이어서 마지막 변수 조작이 되어서 16으로 된 것은

    해당 액터의 체력값을 가르키고 있었기 때문에

    그 부분만 정상적으로 작동을 한 것처럼 보인 겁니다.
  • ?
    참몰랑 2017.05.03 00:57

    와...제 이벤트에 그런 코드 문제가 있었군요. 잘 몰랐네요.
    제가 생각했던 것과 다르게 변수가 제대로 동기화가 안돼서 헛짓하고 있었다니...알만툴 변수 시스템은 어떤 시스템인지 아직까지도 감이 잡히지 않네요. 

    조건분기에 주인공의 스탯 부분은 없더라고요. 스탯 보니까 상태이상만 나와있어서 체력 같은걸 조절하려고 했더니, 항목이 없어서 스크립트를 짜거나 변수를 새로 파야 할 것 같은 기분이 들어 변수를 팠는데, 잘못하고 있었군요. 변수가 제대로 정의가 되지 않았다는 소리를 들었음에도 아직 해결방법을 잘 모르겠습니다.

    제가 알만툴을 아직까지 잘 활용하지 못하는 상태라서 어떻게 이어줘야 할 지 감이 안 잡힙니다. 현재 전 이 문제 때문에 며칠째 넋놓고 있어요. 이 구간을 어떻게 하면 현명하게 풀어나갈 수 있을까요?

     

    초보 하나 구한다 치고 가르쳐 주시면 고맙겠습니다.

     

  • profile
    lklslel 2017.05.03 12:15
    MV에서 사용되는 javascript를 배워서 하시라는 것에는

    무리가 있으니 참몰랑님께서 하신 방법을 조금만 바꿔서

    할 수 있는 방법을 알려드리겠습니다.


    우선 제가 달아둔 댓글 내용들 중에서 조건분기까지는

    제대로 작동했었다는 내용을 기억하시는지요?


    변수가 주인공의 체력값을 가르키도록 이전과 같이

    하신 다음에 HP증감 부분에서만 주인공의 체력 변수

    대신에 주인공 액터를 넣으시면 바로 해결이 되겠습니다.
  • ?
    참몰랑 2017.05.05 03:22
    아... 멀리도 돌아왔네요. 그런 방법이 있었다니.... 상세한 설명 정말 고맙습니다!

List of Articles
번호 제목 글쓴이 날짜 조회 수
8748 휴대폰 게임 실행이 안되요 도와주세요ㅜㅜ 1 데거스 2018.01.11 834
8747 mv게임 apk포팅 관련질문 만무방 2018.01.08 712
8746 도트를 찍을때 전용 툴이나, 자주 사용하시는 툴이 있는지 궁금 합니다 4 HighLight5! 2018.01.05 912
8745 인앱출금 메일로 신청하라는데 어디서 신청하나요 1 라엔 2018.01.04 756
8744 해상도랑 gbm이관련이 있나요?? 겨울날밤 2018.01.02 347
8743 열쇠로 문을 열 때 나오는 대사 한번만 나오게 하기MV 3 고르고르고 2017.12.28 814
8742 무기 착용 안됨 (MV) 1 file 고르고르고 2017.12.25 825
8741 MV 툴 최적화 (이벤트) 지스 2017.12.15 491
8740 RPGXP 잠시 멈추는 현상 2 질문있어여 2017.12.07 788
8739 알만툴 만들다가 파일이 터졌어요.... 2 UX 2017.12.06 929
8738 저 요즘도 구글 스토어 apk 용량 업로드 한계가 100메가인가요? 2 탱크로리 2017.12.03 1120
8737 이벤트 4 file UX 2017.12.02 757
8736 알만툴 MV 차량 이동 이벤트.. 5 UX 2017.11.26 973
8735 아 윈도우스킨 적용문제 어스커 2017.11.20 396
8734 MV 메모리 누수? 지스 2017.11.13 383
8733 데미지 폰트를 변경하려는데 색이 4개가 있는데 그중 하나의 용도 를 모르겠습니다 도와주세요 1 YangMyunCreeper 2017.11.12 340
8732 상용화 관련 질문 2 디스이즈제로 2017.11.04 758
8731 파이썬으로 apk추출할시.. 돼지고기 2017.11.03 424
8730 RPG Maker MV bundle vs collection 구매 질문 1 디스이즈제로 2017.11.01 1183
8729 스팀에서 RPG maker MV정식 버전(+DLC번들팩) 을 구매 했는데 한글이 나오지 않아요. 3 Yetwo 2017.10.27 1218
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 442 Next
/ 442






[개인정보취급방침] | [이용약관] | [제휴문의] | [후원창구] | [인디사이드연혁]

Copyright © 1999 - 2016 INdiSide.com/(주)씨엘쓰리디 All Rights Reserved.
인디사이드 운영자 : 천무(이지선) | kernys(김원배) | 사신지(김병국)