조회 수 1592 추천 수 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
번호 제목 글쓴이 날짜 조회 수
8648 [VXACE]회전하는 막대그림에 충돌 판정(혹은 이벤트 충돌 판정)을 정하고 싶습니다. 4 file Cos!cos! 2017.03.03 561
8647 안녕하세요! 네코RPG XP 플레이어 관련 질문드립니다. neezu 2017.03.02 438
8646 XP 레벨변수 질문해봅니다. 1 준E 2017.02.24 684
8645 인터넷 연결 유무 확인하는 법 1 구미/쿠라마 2017.02.22 838
8644 [VXACE]게임 실행 중 데이터 베이스내의 액터의 메모를 수정 및 추가할 수 있는 방법은 없을까요? file Cos!cos! 2017.02.22 281
8643 [VXACE]스크립트에 NoMethodError undefined method ~~for nil:NilClass가 뜨는데 어떡하죠? 4 Cos!cos! 2017.02.21 1266
8642 네코 1 pjy3216s 2017.02.21 262
8641 RPG XP 확장자를 바꿨는데 뭐였는지 까먹었습니다... 1 file 준E 2017.02.20 723
8640 RPG MAKER XP 게임에서 컴퓨터 윈도우 창 표현하기 2 수냐 2017.02.18 712
8639 네코로 mv돌리니깐 방향키가! 1 버들 2017.02.18 810
8638 터치스크립트? 1 뿡꾸 2017.02.17 716
8637 ㄹㅇ궁금함 4 Dkdjdos 2017.02.16 729
8636 RPG MAKER MV에서 게임 시작과 동시에 타임카운팅을 하고싶은데 3 냉동새우 2017.02.14 810
8635 대화창 불투명도 조절(ACE) 2 수녀갓 2017.02.13 726
8634 [MV] 겹치는 Sprite 순서 질문입니다 3 file huguduk 2017.02.07 503
8633 MV 맵칩과 캐릭터칩을 보니까 2 스탈린 2017.02.07 1094
8632 No implicit conversion ~~~ 하는 오류좀 도와주십쇼 1 리하링 2017.02.05 617
8631 [RPG XP] 해상도 질문 1 스탈린 2017.02.04 1276
8630 RPG MAKER XP 구매처 질문 2 스탈린 2017.02.04 710
8629 캐릭터칩 사용법 질문 2 file 오리고기훈제 2017.02.04 746
Board Pagination Prev 1 ... 5 6 7 8 9 10 11 12 13 14 ... 442 Next
/ 442






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

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