?

단축키

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
번호 제목 글쓴이 날짜 조회 수
8728 현재 맵에있는 타일셋 아이디를 스크립트로 변경하는법 없나요 연(淵) 2007.06.20 780
8727 현재 네코 rpg xp 플레이어 어플은 업데이트가 중단된 상태인가요? 4 어딘가 2014.03.21 698
8726 현재 rpgvx게임을 네코플레이어로 구동시 아이템창에서 아래로 스크롤 되지않는문제 3 별광 2016.10.16 877
8725 현재 alert 오류가 뜨는 게임들은 구동 불가인가요? 2 file 윙디깁디 2016.04.11 1248
8724 허허, 캐릭터가 맵 위에 털썩! 로안 2006.04.13 165
8723 허허, 캐릭터가 맵 위에 털썩! Ress 2006.04.13 184
8722 허허, 캐릭터가 맵 위에 털썩! 호야군☆ 2006.04.13 157
8721 허허, 캐릭터가 맵 위에 털썩! 비령[斐鈴] 2006.04.12 238
8720 허시 유적 발판 깨주세요 창조도스 2010.04.24 1339
8719 허무의서공략좀여 10 고등어 2014.03.12 789
8718 허무의서 켈빈 검은탑 레버 조작 질문드릴게요. 3 먹고살 2014.02.27 1025
8717 허무의 서 中 2 PU 2014.04.01 452
8716 허무의 서 9 피유 2014.04.01 643
8715 허공에 검을 휘두르는 방법을 알려주세요 -불사조- 2007.02.17 376
8714 핸드폰으로 아오오니 가 안되요(긴급) 3 꽐라 2014.03.27 2251
8713 핸드폰으로 게임만드는 어플있나요? 25 마꾼 2013.09.21 1340
8712 핸드폰에서 사용하면 오류 걸리는 스크립트좀 알려주세요. 1 알파6 2015.11.15 309
8711 핸드폰에거첨부파일올리기 1 꾸러기 2014.08.23 861
8710 해외 쯔꾸르 게임을 한글화 어떻게 하는건가요? 2 노우어스 2016.01.15 619
8709 해상도랑 gbm이관련이 있나요?? 겨울날밤 2018.01.02 347
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(김원배) | 사신지(김병국)