?

단축키

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
번호 제목 글쓴이 날짜 조회 수
8729 모든 스트립트 오류 안토시안 2017.06.10 221
8728 오류 발생.. 파일 살릴 수 있을까요? UX 2017.06.10 170
8727 좋은 맵 만드는 팁 같은게 있나요? 1 준E 2017.06.09 615
8726 RPGMV 스크립트를 이용한 세이브 삭제 2 흔들린콜라 2017.06.08 561
8725 몬스터 또는 캐릭터 추가.. 2 UX 2017.06.07 568
8724 MV 캐릭칩 투명색 지정때문에 질문드립니다 2 바른불빛스튜디오 2017.06.06 556
8723 RPG MV 무기별로 기본 공격을 다르게 지정할수 있나요? 2 Wuri 2017.06.04 565
8722 이런거 여기질문해도 되나 1 윌드라이버 2017.06.03 549
8721 RPG maker MV 로 게임을 만들고 있었는데요. APK 변환 관련 질문 드립니다. ㅇ.ㅇ; 6 낭만곰 2017.06.02 1333
8720 네코플 광고 질문 2 세종군(카브에트) 2017.05.26 594
8719 RPG XP에서 장비 화면의 호출은 어떻게 하나요? 1 file 심심치 2017.05.22 562
8718 제가 만든 게임을 리뷰 하려고 하는데요. 6 1324의남자 2017.05.18 1258
8717 [질문]RPG MV 식물 재배에 관한 이벤트인데 문제가 있어 질문합니다! [이미지첨부] 3 file MoonJ 2017.05.18 579
8716 [RPGMV] 초보자 질문합니다^_^ 5 MoonJ 2017.05.17 651
8715 건물위에서 데미지를 안받게 하려면 어떻게 해야 하나요? 5 1324의남자 2017.05.16 566
8714 조건이 있는 대화중 esc를 누르면 두번째 조건이 선택되네요. 왜 그럴까요? 3 file 정의오타쿠 2017.05.16 571
8713 웹으로 배포했는데 세이브파일을 따로 저장할 수 없을까요?? 5 카라스노오 2017.05.15 591
8712 알만툴 게임 만들어서, 수입을 많이 낼수있을까요? 6 문방구 2017.05.10 1360
8711 MV 에서 해상도변경 플러그인 쓰니 메뉴가 잘려요; 3 file 문방구 2017.05.09 673
8710 이동 경로 설정하고 액터가 움직이네요 6 준E 2017.05.09 735
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(김원배) | 사신지(김병국)