조회 수 681 추천 수 0 댓글 5
?

단축키

Prev이전 문서

Next다음 문서

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

단축키

Prev이전 문서

Next다음 문서

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

MV상에서는 툴을통해 이동속도를 조절하여 저장하면,

 

data폴더에 json 파일로 저장이되는데 가장 느린속도를 지정해도 1로지정되게 되더군요.

 

이를 임의적으로 수정하거나 아니면 코드상에서 수정할수 있을까요?

 

흐름 자체가 initialize -> ... -> update로 들어가게되는데

 

update에서 체크하기에는 약간 성향이 다른것같고,

 

init 에서 수정해도 json에 적힌 값이 덮어씌워지더군요.

 

조언부탁드립니다.

?
  • profile
    lklslel 2016.11.15 12:50
    ※ 적이 맵 상에 출현하여 움직이는 방식의 것은 ※

    ※ 현재 오프라인 상에 없기에... 우선 플레이어만 다룹니다. ※

    웹 브라우저로 실행해서 개발자 도구에서 _moveSpeed의 값을

    변경하면 그대로 적용이 됩니다.


    툴에서 권장하는 최소 속도가 1인듯하니 스크립트로 처리를 하시면

    제대로 원하는 연출을 가능하게 할 것으로 생각됩니다.


    어떤 상황일 때에 속도가 느려져야 하는지는 모르겠지만

    (세부적인 사항은 모르고 방법만 기재합니다.)


    저라면 따로 함수를 만들어 두고서 기본 값과 토글되는

    방식으로 처리를 해보겠습니다.


    rpg_object.js 의 6222줄부터 있는 함수를 복사해서 편집합니다.


    다음과 같이 원래의 변수는 남겨두고 새로

    this._moveSpeed_에 원래의 이동 값을 저장합니다.

    그리고 새로 플러그인으로 작성해서 꽂아주시면 됩니다.


    Game_CharacterBase.prototype.initMembers = function() {
    this._x = 0;
    this._y = 0;
    this._realX = 0;
    this._realY = 0;

    this._moveSpeed_ = 4;
    this._moveSpeed = this._moveSpeed_;

    this._moveFrequency = 6;
    this._opacity = 255;
    this._blendMode = 0;
    this._direction = 2;
    this._pattern = 1;
    this._priorityType = 1;
    this._tileId = 0;
    this._characterName = '';
    this._characterIndex = 0;
    this._isObjectCharacter = false;
    this._walkAnime = true;
    this._stepAnime = false;
    this._directionFix = false;
    this._through = false;
    this._transparent = false;
    this._bushDepth = 0;
    this._animationId = 0;
    this._balloonId = 0;
    this._animationPlaying = false;
    this._balloonPlaying = false;
    this._animationCount = 0;
    this._stopCount = 0;
    this._jumpCount = 0;
    this._jumpPeak = 0;
    this._movementSuccess = true;
    };


    Game_Character 객체는 Game_CharacterBase의 인스턴스로

    Game_CharacterBase객체의 모든 것을 사용할 수 있습니다.

    아래의 부분도 만드시는 플러그인에 꽂아넣어주시고 사용하면 됩니다.

    ※ 아래 2개의 함수는 새로 추가하실 함수입니다. ※

    [ 아래의 .changeSpeed()는 단순하게 작성한 예입니다. ]


    Game_Character.prototype.changeSpeed = function(moveSpeed){
    this._moveSpeed = moveSpeed;
    };

    Game_Character.prototype.initSpeed = function(){
    this._moveSpeed = this._moveSpeed_;
    };




    사용하실 이동값을 배열에 저장해서 쓴다면

    .changeSpeed()를 위와는 다르게 해야 됩니다.



    //플러그인 설명문 시작
    //직접 하실 줄 아실테니 수도코드로만
    //플러그인 설명문 끝

    //플러그인 매니저에 해당 플러그인 로딩시키기
    //직접 하실 줄 아실테니 수도코드로만

    //change speed array : csa
    //특정 상황에 연동시키시려면 ._moveSpeed값만
    //있으면 안됩니다. 추가적으로 생각을 하셔서
    //적용을 하시지 않으면 원하실 때에 작동하지 않습니다.
    //맵상에 표시된 플레이어 파티의 리더 Actor의 상태를
    //기준으로 가정하여 작성해보겠습니다.
    //csa[ 상태번호 ] = [ 상태번호 , 이동속도 ];
    var csa = new Array();
    csa[0] = [0,0.1];

    Game_Character.prototype.changeSpeed = function(){
    var cs,cs2;
    switch(typeof csa === "undefined"){
    case true:
    return false;
    }
    for(cs = 0;cs < $gameActors._data.length;cs++){
    switch($gameActors._data[cs]._characterIndex === $gamePlayer._characterIndex){
    case true:
    for(cs2 = 0;cs2 < $gameActors._data[cs]._states.length;cs2++){
    switch($gameActors._data[cs]._states[cs2] === Number(csa[$gameActors._data[cs]._states[cs2]][0])){
    case true:
    this._moveSpeed = Number(csa[$gameActors._data[cs]._states[cs2]][1]);
    return true;
    }
    }
    break;
    }
    }
    };



    위의 스크립트가 에러가 나면 .changeSpeed()를 다음과 같이


    Game_Character.prototype.changeSpeed = function(){
    var cs,cs2;
    switch(typeof csa === "undefined"){
    case true:
    return false;
    }
    for(cs = 0;cs < $gameActors._data.length;cs++){
    switch($gameActors._data[cs] instanceof Object
    && $gameActors._data[cs]._characterIndex === $gamePlayer._characterIndex){
    case true:
    for(cs2 = 0;cs2 < $gameActors._data[cs]._states.length;cs2++){
    switch(csa[$gameActors._data[cs]._states[cs2]] instanceof Array
    && csa[$gameActors._data[cs]._states[cs2]].length === 2
    && $gameActors._data[cs]._states[cs2] === Number(csa[$gameActors._data[cs]._states[cs2]][0])){
    case true:
    this._moveSpeed = Number(csa[$gameActors._data[cs]._states[cs2]][1]);
    return true;
    }
    }
    break;
    }
    }
    };


    이 스크립트는 에러 발생시 2중 for문만 실행하고 나옵니다.


    ※ 실제 사용 방법 ※

    속도 값 변화시 $gamePlayer.changeSpeed();

    원래로 되돌릴 때는 $gamePlayer.initSpeed();


    2중 for문을 사용했기에 속도가 저하되는 관계로

    switch문으로 보완하려고 했습니다.

    if문으로도 속도가 떨어지지 않는다면 if문을 쓰시길...

    제가 작성해드린 방식은 속도 최적화 방식이 아닙니다.
  • profile
    lklslel 2016.11.15 15:03
    맵 상에 이벤트로 돌아다니도록 되어있는 개체에게

    적용하시려면 $gameMap 객체에서 처리를 하셔야 합니다.


    이벤트의 번호를 알고 계신 경우에는

    $gameMap._events[ 이벤트번호 ].changeSpeed();
    $gameMap._events[ 이벤트번호 ].initSpeed();


    이벤트가 발생하는 좌표만 알고 계실 경우에는

    변수에

    //change speed event
    var cs;
    var cse = $gameMap.eventsXy(x좌표,y좌표);

    와 같이 담으신 다음에 for문을 통해

    처음부터 끝까지 배열 인덱스를 훑으시면서

    for(cs = 0;cs < cse.length;cs++){
    switch(cse[cs]._characterIndex === 찾는 캐릭터의 인덱스 번호){
    case true:
    cse[cs].changeSpeed();
    return true;
    }
    }

    맵상에서 플레이어가 조작가능한 캐릭터와

    움직이는 모든 요소에 대해서 적용하시려면

    플레이어에게 적용할 것인지, 다른 개체에

    적용할 것인지에 대한 분류용 데이터가 필요합니다.


    Game_Character.prorotype.changeSpeed = function (category){
    switch(category){
    case "player":
    //플레이어블 캐릭터의 속도 조절에 대한 스크립트
    break;
    case "npc":
    //논-플레이어블 캐릭터의 속도 조절에 대한 스크립트
    break;
    };

    예를 들어서 작성해보면 위와 유사한 구조가 되겠습니다.


    따로 만들어 두시고 쓴다고 하면 생각보다는

    훨씬 쉽게 작성하실 수 있을 겁니다.
  • ?
    huguduk 2016.11.15 23:32
    슈도 코드까지.. 답변 정말 감사드립니다.
    그런데 제가 아무래도 질문을 정확히 안드린거같네요 ㅠㅠ

    정확한 상황은 제가 알만툴의 타일단위 움직임을 ( x값이 증가하면 realX가 증가하며 x에 도달하는방식)
    인풋만큼 realX가 바로 적용되어 픽셀 단위의 움직임으로 바꾸는 구현을 하고있습니다. 어느정도 수정은되었는데,
    기본적으로 Game_CharacterBase 에서 moveSpeed를 0.1 로 적용하려고 했는데
    맵상에서 픽셀단위로 움직이게 하고픈 Game_Event의경우 Game_Event.prototype.initialize 에서 이걸 정의해도
    나중에 값이 덮씌워 지더군요.

    제가 생각한것은 알만툴 자체에서의 흐름을 제가 파악못하고 초기화값을 넣는 타이밍을 잘못파악한것같습니다.
    정확히 모르겠는데(질문이기도 합니다ㅠ) Scene 이불러지고, Scene위에 올라가는 Object 객체(Game_으로 시작하는) 가 불리어 지는 타이밍에 initialze가 불러지는데, 인터프리터가 $dataMap (파일로정의된 데이터들)을 이용하여 값을 초기화하여 제가 initialize 에 서술한것은 값이 덮씌워 지는 느낌입니다.

    혹시 알만툴 주요 객체간 호출관계를 알수있을까요?
    아니면 전역변수를 통하거나, 미리 값을 정의하여 그값을 쓰는것이 나을까요?
    답변해주신 내용은 각 객체에 특정한 트리거를줘서 movespeed를 제어할때 좋을것같습니다. 감사합니다.
  • profile
    lklslel 2016.11.16 09:11
    정확한 스크립트의 관계는 pixi.js 스크립트까지

    구조 분석을 해야 세세한 부분까지 설명드릴 수

    있습니다.


    대략적인 큰 흐름이더라도 분석하는 데 시간이 꽤

    걸릴 겁니다. 외국의 알만툴 커뮤니티에서 나름

    뽑아둔 스크립트 차트들만 봐도 알 수 있는 것은

    구조를 이해한다기 보다는... 현상적으로 변화를

    줄 수 있는 부분들만 긁어서 모아놓은 느낌이라서

    저도 한 때는 꽤 머리 속이 어지러웠습니다.


    제가 전에 말씀드린 적이 있듯이, 스크립트 내의

    실행함수를 일일이 찾아보면서 관계를 정리해야

    하는데, 시간도 엄청걸리고, 보기에 좋게 만드려면

    웹페이지 상의 링크로 엮어진 방식으로 만들 수

    밖에 없는데... 그걸 만든다고 하면, 상당히 전문적인

    알만툴 포럼 사이트를 차리는 것도 나쁘지 않을

    작업량입니다.(시간과 노력이 너무 많이 듭니다.)
  • ?
    huguduk 2016.11.16 22:20
    아무래도 직접 돌려봐서 데이터 로딩시점을 궁리해보는것이 좋을것같네요

    답변감사합니다 ㅎㅎ

List of Articles
번호 제목 글쓴이 날짜 조회 수
8603 mv 타일셋 추가 어떻게 하는 건가요? 철중 2016.12.11 187
8602 게임 어떻게 만드나요?? 2 생사과TV 2016.12.05 645
8601 알만툴 질문 2 새준 2016.12.05 647
8600 [MV] 큰 사이즈의 케릭터을 사용하면 각각의 케릭터가 겹쳐지는데 안겹쳐지게 하는방법이 있나요? 3 file 정산 2016.12.03 639
8599 [MV] 스크립트작성시 디버깅을 보통 어떻게하시나요? 2 huguduk 2016.12.01 536
8598 지나가게님꼐서 주신 앱에.. 4 새준 2016.12.01 578
8597 XP한글패치 4 새준 2016.12.01 642
8596 네코플레이어 a키가 PC버전 vx ace의 무슨 키와 매치인가요? 2 케이디 2016.11.26 689
8595 에러가 자주 떠요 1 로리하앍하앍 2016.11.26 608
8594 APK부탁 2 새준 2016.11.26 629
8593 저장 오류가 나요! (스크린샷 첨부) 1 file 낭만오리 2016.11.22 608
8592 '레벨 변수'는 어떻게 만드나요? 1 낭만오리 2016.11.21 592
8591 vx와ace의 충돌? 1 file 새준 2016.11.20 638
8590 쯔꾸르 ACE 전투메시지 스크립트 한글패치좀...... 4 새준 2016.11.19 737
8589 유투브에 동영상 업로드 오류가 뜨는데 해결법 아시는분 계신가요? 4 file 천가이 2016.11.18 585
8588 rpg maker mv 메뉴얼 같은건 없나요? 2 jerky1112 2016.11.17 550
8587 글자색깔은바꿀수잇나요? 니크로 2016.11.16 229
8586 죄송합니다사진이첨부가안됫네여 1 니크로 2016.11.16 632
8585 처녀신이야기라는게임은플레이불가능인가요?? 2 니크로 2016.11.16 1176
» [MV] movespeed를 1 밑으로 낮출수 있을까요? 5 huguduk 2016.11.14 681
Board Pagination Prev 1 ... 7 8 9 10 11 12 13 14 15 16 ... 442 Next
/ 442






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

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