|
//-----------------------------------------------------------------------------
// Scene_Map
// 地图场景
// The scene class of the map screen.
// 处理 地图画面 的 场景类
function Scene_Map() {
this.initialize.apply(this, arguments);
}
Scene_Map.prototype = Object.create(Scene_Base.prototype);
Scene_Map.prototype.constructor = Scene_Map;
//初始化
Scene_Map.prototype.initialize = function() {
Scene_Base.prototype.initialize.call(this);
this._waitCount = 0;
this._encounterEffectDuration = 0;
this._mapLoaded = false;
this._touchCount = 0;
};
//创建
Scene_Map.prototype.create = function() {
Scene_Base.prototype.create.call(this);
this._transfer = $gamePlayer.isTransferring();
var mapId = this._transfer ? $gamePlayer.newMapId() : $gameMap.mapId();
DataManager.loadMapData(mapId);
};
//是准备好
Scene_Map.prototype.isReady = function() {
if (!this._mapLoaded && DataManager.isMapLoaded()) {
this.onMapLoaded();
this._mapLoaded = true;
}
return this._mapLoaded && Scene_Base.prototype.isReady.call(this);
};
//当地图读取完成
Scene_Map.prototype.onMapLoaded = function() {
if (this._transfer) {
$gamePlayer.performTransfer();
}
this.createDisplayObjects();
};
//开始
Scene_Map.prototype.start = function() {
Scene_Base.prototype.start.call(this);
SceneManager.clearStack();
if (this._transfer) {
this.fadeInForTransfer();
this._mapNameWindow.open();
$gameMap.autoplay();
} else if (this.needsFadeIn()) {
this.startFadeIn(this.fadeSpeed(), false);
}
this.menuCalling = false;
};
//更新
Scene_Map.prototype.update = function() {
this.updateDestination();
this.updateMainMultiply();
if (this.isSceneChangeOk()) {
this.updateScene();
} else if (SceneManager.isNextScene(Scene_Battle)) {
this.updateEncounterEffect();
}
this.updateWaitCount();
Scene_Base.prototype.update.call(this);
};
//更新主要 增加
Scene_Map.prototype.updateMainMultiply = function() {
this.updateMain();
if (this.isFastForward()) {
this.updateMain();
}
};
//更新主要
Scene_Map.prototype.updateMain = function() {
var active = this.isActive();
$gameMap.update(active);
$gamePlayer.update(active);
$gameTimer.update(active);
$gameScreen.update();
};
//是快速进行
Scene_Map.prototype.isFastForward = function() {
return ($gameMap.isEventRunning() && !SceneManager.isSceneChanging() &&
(Input.isLongPressed('ok') || TouchInput.isLongPressed()));
};
//停止
Scene_Map.prototype.stop = function() {
Scene_Base.prototype.stop.call(this);
$gamePlayer.straighten();
this._mapNameWindow.close();
if (this.needsSlowFadeOut()) {
this.startFadeOut(this.slowFadeSpeed(), false);
} else if (SceneManager.isNextScene(Scene_Map)) {
this.fadeOutForTransfer();
} else if (SceneManager.isNextScene(Scene_Battle)) {
this.launchBattle();
}
};
//是忙碌
Scene_Map.prototype.isBusy = function() {
return ((this._messageWindow && this._messageWindow.isClosing()) ||
this._waitCount > 0 || this._encounterEffectDuration > 0 ||
Scene_Base.prototype.isBusy.call(this));
};
//终止
Scene_Map.prototype.terminate = function() {
Scene_Base.prototype.terminate.call(this);
if (!SceneManager.isNextScene(Scene_Battle)) {
this._spriteset.update();
this._mapNameWindow.hide();
SceneManager.snapForBackground();
}
$gameScreen.clearZoom();
};
//需要淡入
Scene_Map.prototype.needsFadeIn = function() {
return (SceneManager.isPreviousScene(Scene_Battle) ||
SceneManager.isPreviousScene(Scene_Load));
};
//需要淡出
Scene_Map.prototype.needsSlowFadeOut = function() {
return (SceneManager.isNextScene(Scene_Title) ||
SceneManager.isNextScene(Scene_Gameover));
};
//更新等待计数
Scene_Map.prototype.updateWaitCount = function() {
if (this._waitCount > 0) {
this._waitCount--;
return true;
}
return false;
};
//更新目的地
Scene_Map.prototype.updateDestination = function() {
if (this.isMapTouchOk()) {
this.processMapTouch();
} else {
$gameTemp.clearDestination();
this._touchCount = 0;
}
};
//是地图触摸确定
Scene_Map.prototype.isMapTouchOk = function() {
return this.isActive() && $gamePlayer.canMove();
};
//进程地图触摸
Scene_Map.prototype.processMapTouch = function() {
if (TouchInput.isTriggered() || this._touchCount > 0) {
if (TouchInput.isPressed()) {
if (this._touchCount === 0 || this._touchCount >= 15) {
var x = $gameMap.canvasToMapX(TouchInput.x);
var y = $gameMap.canvasToMapY(TouchInput.y);
$gameTemp.setDestination(x, y);
}
this._touchCount++;
} else {
this._touchCount = 0;
}
}
};
//是场景改变确定
Scene_Map.prototype.isSceneChangeOk = function() {
return this.isActive() && !$gameMessage.isBusy();
};
//更新场景
Scene_Map.prototype.updateScene = function() {
this.checkGameover();
if (!SceneManager.isSceneChanging()) {
this.updateTransferPlayer();
}
if (!SceneManager.isSceneChanging()) {
this.updateEncounter();
}
if (!SceneManager.isSceneChanging()) {
this.updateCallMenu();
}
if (!SceneManager.isSceneChanging()) {
this.updateCallDebug();
}
};
//创建显示对象
Scene_Map.prototype.createDisplayObjects = function() {
this.createSpriteset();
this.createMapNameWindow();
this.createWindowLayer();
this.createAllWindows();
};
//创建精灵
Scene_Map.prototype.createSpriteset = function() {
this._spriteset = new Spriteset_Map();
this.addChild(this._spriteset);
};
//创建所有窗口
Scene_Map.prototype.createAllWindows = function() {
this.createMessageWindow();
this.createScrollTextWindow();
};
//创建地图名称窗口
Scene_Map.prototype.createMapNameWindow = function() {
this._mapNameWindow = new Window_MapName();
this.addChild(this._mapNameWindow);
};
//创建信息窗口
Scene_Map.prototype.createMessageWindow = function() {
this._messageWindow = new Window_Message();
this.addWindow(this._messageWindow);
this._messageWindow.subWindows().forEach(function(window) {
this.addWindow(window);
}, this);
};
//创建滚动文本窗口
Scene_Map.prototype.createScrollTextWindow = function() {
this._scrollTextWindow = new Window_ScrollText();
this.addWindow(this._scrollTextWindow);
};
//更新转移角色
Scene_Map.prototype.updateTransferPlayer = function() {
if ($gamePlayer.isTransferring()) {
SceneManager.goto(Scene_Map);
}
};
//更新相遇
Scene_Map.prototype.updateEncounter = function() {
if ($gamePlayer.executeEncounter()) {
SceneManager.push(Scene_Battle);
}
};
//更新呼叫
Scene_Map.prototype.updateCallMenu = function() {
if (this.isMenuEnabled()) {
if (this.isMenuCalled()) {
this.menuCalling = true;
}
if (this.menuCalling && !$gamePlayer.isMoving()) {
this.callMenu();
}
} else {
this.menuCalling = false;
}
};
//是菜单激活
Scene_Map.prototype.isMenuEnabled = function() {
return $gameSystem.isMenuEnabled() && !$gameMap.isEventRunning();
};
//是菜单呼叫后
Scene_Map.prototype.isMenuCalled = function() {
return Input.isTriggered('menu') || TouchInput.isCancelled();
};
//呼叫菜单
Scene_Map.prototype.callMenu = function() {
SoundManager.playOk();
SceneManager.push(Scene_Menu);
Window_MenuCommand.initCommandPosition();
$gameTemp.clearDestination();
this._mapNameWindow.hide();
this._waitCount = 2;
};
//更新呼叫调试
Scene_Map.prototype.updateCallDebug = function() {
if (this.isDebugCalled()) {
SceneManager.push(Scene_Debug);
}
};
//是调试呼叫后
Scene_Map.prototype.isDebugCalled = function() {
return Input.isTriggered('debug') && $gameTemp.isPlaytest();
};
//淡入为了转移
Scene_Map.prototype.fadeInForTransfer = function() {
var fadeType = $gamePlayer.fadeType();
switch (fadeType) {
case 0: case 1:
this.startFadeIn(this.fadeSpeed(), fadeType === 1);
break;
}
};
//淡出为了转移
Scene_Map.prototype.fadeOutForTransfer = function() {
var fadeType = $gamePlayer.fadeType();
switch (fadeType) {
case 0: case 1:
this.startFadeOut(this.fadeSpeed(), fadeType === 1);
break;
}
};
//开始战斗
Scene_Map.prototype.launchBattle = function() {
BattleManager.saveBgmAndBgs();
this.stopAudioOnBattleStart();
SoundManager.playBattleStart();
this.startEncounterEffect();
this._mapNameWindow.hide();
};
//停止音频当战斗开始
Scene_Map.prototype.stopAudioOnBattleStart = function() {
if (!AudioManager.isCurrentBgm($gameSystem.battleBgm())) {
AudioManager.stopBgm();
}
AudioManager.stopBgs();
AudioManager.stopMe();
AudioManager.stopSe();
};
//开始相遇结果
Scene_Map.prototype.startEncounterEffect = function() {
this._spriteset.hideCharacters();
this._encounterEffectDuration = this.encounterEffectSpeed();
};
//更新相遇结果
Scene_Map.prototype.updateEncounterEffect = function() {
if (this._encounterEffectDuration > 0) {
this._encounterEffectDuration--;
var speed = this.encounterEffectSpeed();
var n = speed - this._encounterEffectDuration;
var p = n / speed;
var q = ((p - 1) * 20 * p + 5) * p + 1;
var zoomX = $gamePlayer.screenX();
var zoomY = $gamePlayer.screenY() - 24;
if (n === 2) {
$gameScreen.setZoom(zoomX, zoomY, 1);
this.snapForBattleBackground();
this.startFlashForEncounter(speed / 2);
}
$gameScreen.setZoom(zoomX, zoomY, q);
if (n === Math.floor(speed / 6)) {
this.startFlashForEncounter(speed / 2);
}
if (n === Math.floor(speed / 2)) {
BattleManager.playBattleBgm();
this.startFadeOut(this.fadeSpeed());
}
}
};
//拍摄为了背景
Scene_Map.prototype.snapForBattleBackground = function() {
this._windowLayer.visible = false;
SceneManager.snapForBackground();
this._windowLayer.visible = true;
};
//播放flash为了相相遇
Scene_Map.prototype.startFlashForEncounter = function(duration) {
var color = [255, 255, 255, 255];
$gameScreen.startFlash(color, duration);
};
//相遇结果速度
Scene_Map.prototype.encounterEffectSpeed = function() {
return 60;
};
站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作
GMT+8, 2024-5-10 16:27
Powered by Discuz! X3.1
© 2001-2013 Comsenz Inc.