?

단축키

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
번호 제목 글쓴이 날짜 조회 수
8717 제가 만든 게임을 리뷰 하려고 하는데요. 6 1324의남자 2017.05.18 1259
8716 [질문]RPG MV 식물 재배에 관한 이벤트인데 문제가 있어 질문합니다! [이미지첨부] 3 file MoonJ 2017.05.18 581
8715 [RPGMV] 초보자 질문합니다^_^ 5 MoonJ 2017.05.17 656
8714 건물위에서 데미지를 안받게 하려면 어떻게 해야 하나요? 5 1324의남자 2017.05.16 567
8713 조건이 있는 대화중 esc를 누르면 두번째 조건이 선택되네요. 왜 그럴까요? 3 file 정의오타쿠 2017.05.16 571
8712 웹으로 배포했는데 세이브파일을 따로 저장할 수 없을까요?? 5 카라스노오 2017.05.15 593
8711 알만툴 게임 만들어서, 수입을 많이 낼수있을까요? 6 문방구 2017.05.10 1366
8710 MV 에서 해상도변경 플러그인 쓰니 메뉴가 잘려요; 3 file 문방구 2017.05.09 677
8709 이동 경로 설정하고 액터가 움직이네요 6 준E 2017.05.09 735
8708 쯔꾸르게임에관해서... 2 난이 2017.05.07 705
8707 rpg mv 쪽 쯔꾸르 모바일 세이브 위치가 어디인가요 뽕뽀로루 2017.05.07 529
8706 스크립트를 활용해서 운이라는 능력치를 무효시키는 방법은 없나요? RPG란무엇인가? 2017.05.06 175
8705 이 사이트에 게시판 몇개가 가려져서 클릭을 못하겠는데 이런 경우엔 어떻게 해야 하나요? 2 file wwlekd 2017.05.05 573
8704 ?이게뭐죠? 앱 오륜가? 플레이스토어 앱 제출 오류. 이상하면 앱 보내드려요 5 file 새준 2017.05.04 601
8703 MV게임으로 구글 플레이스토어 인앱결제를 넣을수 있을까요? 7 huguduk 2017.05.01 1209
» 알만툴 변수 알고리즘을 잘 모르겠어요. 왜 조건문 실행이 안될까요? 11 참몰랑 2017.04.28 1266
8701 [MV] 비 스팀 판은 DLC 사용 못하나요? 2 MV초보자 2017.04.28 721
8700 MV에서 사용자 말풍선 아이콘을 추가 하려면 어케 해야할까요? 6 참몰랑 2017.04.25 868
8699 [ RPG XP ] 인디사이드에서 게임맵을 업로드할떄 무슨 파일을 업로드 해야하나요? 네티즌 2017.04.21 180
8698 [RMMV] 안드로이드용 apk로 빌드하니 Fail to load : img~ 에러가 발생합니다. 8 MVMAKER 2017.04.17 1348
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 441 Next
/ 441






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

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