Ace 스크립트

스크립트는 다룰줄 모르니 그냥 여기 저기 빼고 붙이면서 만든 스크립트입니다.

 

Scene_Base 에 이것을 덮어씌웁니다.

#==============================================================================
# ■ Scene_Base
#------------------------------------------------------------------------------
#  게임중의 모든 씬의 슈퍼 클래스입니다.
#==============================================================================

class Scene_Base
  #--------------------------------------------------------------------------
  # ● 메인
  #--------------------------------------------------------------------------
  def main
    start
    post_start
    update until scene_changing?
    pre_terminate
    terminate
  end
  #--------------------------------------------------------------------------
  # ● 개시 처리
  #--------------------------------------------------------------------------
  def start
    create_main_viewport
  end
  #--------------------------------------------------------------------------
  # ● 개시 후처리
  #--------------------------------------------------------------------------
  def post_start
    perform_transition
    Input.update
  end
  #--------------------------------------------------------------------------
  # ● 씬 변경중 판정
  #--------------------------------------------------------------------------
  def scene_changing?
    SceneManager.scene != self
  end
  #--------------------------------------------------------------------------
  # ● 프레임 갱신
  #--------------------------------------------------------------------------
  def update
    update_basic
  end
  #--------------------------------------------------------------------------
  # ● 프레임 갱신(기본)
  #--------------------------------------------------------------------------
  def update_basic
    Graphics.update
    Input.update
    update_all_windows
  end
  #--------------------------------------------------------------------------
  # ● 종료 사전 처리
  #--------------------------------------------------------------------------
  def pre_terminate
  end
  #--------------------------------------------------------------------------
  # ● 종료 처리
  #--------------------------------------------------------------------------
  def terminate
    Graphics.freeze
    dispose_all_windows
  end
  #--------------------------------------------------------------------------
  # ● 트란지션 실행
  #--------------------------------------------------------------------------
  def perform_transition
    Graphics.transition(transition_speed)
  end
  #--------------------------------------------------------------------------
  # ● 트란지션 속도의 취득
  #--------------------------------------------------------------------------
  def transition_speed
    return 10
  end
  #--------------------------------------------------------------------------
  # ● 뷰포트의 작성
  #--------------------------------------------------------------------------
  def create_main_viewport
    @viewport = Viewport.new
    @viewport.z = 200
  end
  #--------------------------------------------------------------------------
  # ● 전윈도우의 갱신
  #--------------------------------------------------------------------------
  def update_all_windows
    instance_variables.each do |varname|
      ivar = instance_variable_get(varname)
      ivar.update if ivar.is_a?(Window)
    end
  end
  #--------------------------------------------------------------------------
  # ● 전윈도우의 해방
  #--------------------------------------------------------------------------
  def dispose_all_windows
    instance_variables.each do |varname|
      ivar = instance_variable_get(varname)
      ivar.dispose if ivar.is_a?(Window)
    end
  end
  #--------------------------------------------------------------------------
  # ● 호출원의 씬에 돌아온다
  #--------------------------------------------------------------------------
  def return_scene
    SceneManager.return
  end
  #--------------------------------------------------------------------------
  # ● 각종 사운드와 그래픽의 일괄 페이드아웃
  #--------------------------------------------------------------------------
  def fadeout_all(time = 1000)
    RPG::BGM.fade(time)
    RPG::BGS.fade(time)
    RPG::ME.fade(time)
    Graphics.fadeout(time * Graphics.frame_rate / 1000)
    RPG::BGM.stop
    RPG::BGS.stop
    RPG::ME.stop
  end
  #--------------------------------------------------------------------------
  # ● 게임 오버 판정
  #    파티가 전멸 상태라면 게임 오버 화면에 천이 한다.
  #--------------------------------------------------------------------------
  def check_gameover
    SceneManager.goto(Scene_Gameover) if $game_party.all_dead?
  end
end

Scene_Title 에 이것을 덮어씌웁니다.

#==============================================================================
# ■ Scene_Title
#------------------------------------------------------------------------------
#  타이틀 화면의 처리를 실시하는 클래스입니다.
#==============================================================================

class Scene_Title < Scene_Base
  #--------------------------------------------------------------------------
  # ● 개시 처리
  #--------------------------------------------------------------------------
  def start
    DataManager.setup_new_game
    fadeout_all
    $game_map.autoplay
    SceneManager.goto(Scene_Map)
  end
end

 

이것으로 끝.

근데 이렇게 하면 별 문제가 안일어날까 싶네요.

 

덧붙여 세이브, 로드를 하려면 어떤 구분을 이벤트 커맨드에 입력해야하나 싶네요.

세이브는 세이브 화면 로드 하면 될 것 같은데 로드는?

Who's 마에르드

profile

이웃 나라의 왕자가 잡혀갔다!

왕자를 구하려는 공주님의 대 모험이 펼쳐진다!

 

Nella Fantasia

  • ?
    kiyohwan 2012.02.12 12:38

    실행해보시면 에러납니다.

    수정하신 코드를 보면 foreground, background를 초기화하는 create_foreground, create_background를 생략하셨네요. Scene_Title클래스 해제시 실행되는terminate함수에 foreground, background에 만들어둔 스프라이트 객체를 해제하는 코드가 들어있기 때문에 nil에러가 납니다.

    타이틀 화면이 잠깐 비쳐도 상관없다면 크게 손댈 것 없이 몇라인만 추가하면 되지만 타이틀화면 자체가 나오지 않고 바로 게임 플레이를 시작하고 싶다면 Scene_Title를 꽤 많이 손봐야 하네요.

    그리고 스크립트 수정시 꽤 중요한 사항인데요.

    기존 스크립트를 직접 수정하지 마시고 제일 하단의 main 바로 앞부분에서 재정의해주는 편이 이후의 수정이나 확장이 쉽습니다.

  • profile
    마에르드 2012.02.12 13:31

    음. 어렵군요. 음... 음... 모르겠다.

    저걸 main 바로 앞에 다시 넣으면 될까요?

    에러경우는 아직 제작 초기라 발견하지를 못했네요... 흠.

     

    덧붙여 어느 부분에서 에러가 나는지,,;; 흠.

  • ?

    스크립트 에디터를 열어서 그림대로의 위치에 스크립트를 추가하시면 됩니다.

    그리고 에러의 경우는 프로그래밍을 모르시면 설명이 너무 길어집니다.

    아무래도 프로그래밍을 전혀 모른다면 공부를 하는 수 밖에 없습니다.

    도움말을 읽어보는 것만으로도 꽤 도움이 되니 기초를 배운다는 생각으로 읽어보고 예제를 따라해 보세요.

    일단 타이틀 없이 바로 게임이 시작하고 세이브가 있을 경우 타이틀화면이 나오도록 하는 수정예는 따로 설명을 해보도록 하죠.

    연출적으로 저도 생각해본 적이 있던 거라 흥미가 동해서 만들어봤습니다.

  • ?
    kiyohwan 2012.02.12 15:27

    class Scene_Title # 기존의 Scene_Title를 재정의(Overwirte)
      # Scene_Title가 만들어져서 실행될 때 호출되는 함수
      def start # 이렇게 전부를 새로 정의할 필요없이 수정이 필요한 함수만 새로 정의해 주면 됨.
        super
        SceneManager.clear
        Graphics.freeze
        if !DataManager.save_file_exists? # 세이브  존재여부를 확인해 없으면 바로 새게임을 시작
          # DataManager라는 모듈의 함수로 세이브 존재여부를 확인합니다.
          # command_new_game함수를 바로 호출할 경우 역시 메모리 반환 관련으로 문제가 있어 필요한 내용만 가져왔습니다.
          DataManager.setup_new_game
          fadeout_all
          $game_map.autoplay
          SceneManager.goto(Scene_Map)
        else # 세이브가 존재할 경우 기존의 타이틀 화면 출력
          # 이하는 타이틀화면 구성을 그리는 부분
          # 여기서 실제로 메모리를 사용하기 때문에
          # Scene_Title사용이 끝나고 메모리를 반환하는 처리가 종료시 들어가 있습니다.
          create_background
          create_foreground
          create_command_window
          play_title_music
        end
      end
      # Scene_Title가 해제될 때 호출되는 함수
      def terminate
        super
        SceneManager.snapshot_for_background
        if DataManager.save_file_exists? # 세이브가 있을 경우는 타이틀 화면을 출력했으므로 메모리반환처리를 실시함 
          # 이 밑으로는 타이틀 화면 구성이 사용한 메모리를 반환하는 처리
          dispose_background
          dispose_foreground
        end
      end
    end

    간단하게 수정해본 건데 여기서 만족하지 마시고 도움말로 기초를 닦고 Ruby를 공부해 보세요. 그러면 좀더 많은 걸 할 수 있게 될 겁니다.
  • profile
    마에르드 2012.02.13 07:44

    귀찮으셨을텐데 이렇게 설명해주셔서 감사합니당,,
    정말 많은 도움이 되었어요 ㅋㅋ
    진짜 루비 공부밖엔 답이 읎나봅니다 ㅠㅠ..

  • ?
    Nintendo 2012.03.03 17:37

    ㅇ...우왕 대단하시당ㄷ


List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
공지 스크립트 자료 게시물 작성시 주의사항 습작 2012.12.24 5109
공지 RPG VX ACE 유용한 링크 모음 16 아방스 2012.01.03 28923
9 타이틀/게임오버 GG침 스크립트 file 큔. 2018.07.18 835
8 타이틀/게임오버 시작 전 로고 띄우기 7 file 냐냐 2014.12.04 3367
7 타이틀/게임오버 [VX ACE]타이틀 화면에 맵을 표시하는 스크립트 4 file 스리아씨 2013.12.07 3540
6 타이틀/게임오버 No Game Over 1 file 스리아씨 2013.09.26 2399
5 타이틀/게임오버 타이틀 스크린 커스터마이징 11 file 라실비아 2013.08.12 5153
4 타이틀/게임오버 Title Skip System - 타이틀 스킵 9 허걱 2012.12.17 2872
» 타이틀/게임오버 타이틀 화면 없이 게임을 시작하게 만드는법. 6 마에르드 2012.02.11 4585
2 타이틀/게임오버 코아 코스튬씨의 랜덤 타이틀 스크립트를 VX Ace용으로 변환 (완성판) 2 Alkaid 2012.01.25 3980
1 타이틀/게임오버 코아 코스튬씨의 랜덤 타이틀 출력 스크립트를 VX Ace용으로 변환 (테스트용) 1 Alkaid 2011.12.29 3189
Board Pagination Prev 1 Next
/ 1