実験場
差分
このページの2つのバージョン間の差分を表示します。
次のリビジョン | 前のリビジョン | ||
実験場 [2024/03/11 05:54] – 作成 tytinfo | 実験場 [2025/04/08 11:17] (現在) – tytinfo | ||
---|---|---|---|
行 1: | 行 1: | ||
- | < | + | 1 |
- | <html lang=" | + | |
- | + | ||
- | < | + | |
- | <meta charset=" | + | |
- | < | + | |
- | < | + | |
- | body, | + | |
- | html { | + | |
- | margin: 0; | + | |
- | padding: 0; | + | |
- | height: 100%; | + | |
- | overflow: hidden; | + | |
- | } | + | |
- | + | ||
- | .game-container { | + | |
- | height: 100%; | + | |
- | background-color: | + | |
- | position: relative; | + | |
- | background-size: | + | |
- | background-position: | + | |
- | /* 中央に配置 */ | + | |
- | background-repeat: | + | |
- | /* 画像の繰り返し無し */ | + | |
- | } | + | |
- | + | ||
- | .dialogue-box { | + | |
- | position: absolute; | + | |
- | bottom: 0; | + | |
- | width: 100%; | + | |
- | background: rgba(0, 0, 0, 0.8); | + | |
- | padding: 20px; | + | |
- | box-sizing: border-box; | + | |
- | color: white; | + | |
- | font-family: | + | |
- | font-size: 2em; | + | |
- | } | + | |
- | + | ||
- | # | + | |
- | white-space: | + | |
- | overflow: hidden; | + | |
- | min-height: 80px; | + | |
- | } | + | |
- | + | ||
- | + | ||
- | # | + | |
- | display: none; | + | |
- | position: absolute; | + | |
- | right: 20px; | + | |
- | top: 20px; | + | |
- | background-color: | + | |
- | padding: 10px; | + | |
- | box-shadow: 0 0 10px rgba(0, 0, 0, 0.5); | + | |
- | display: flex; | + | |
- | flex-direction: | + | |
- | } | + | |
- | + | ||
- | + | ||
- | /* position: absolute を削除し、パネル内のボタンのスタイルを調整 */ | + | |
- | # | + | |
- | # | + | |
- | # | + | |
- | # | + | |
- | # | + | |
- | # | + | |
- | padding: 5px 10px; | + | |
- | font-size: 0.7em; | + | |
- | color: white; | + | |
- | background-color: | + | |
- | border: none; | + | |
- | cursor: pointer; | + | |
- | margin: 2px 0; | + | |
- | /* ボタン間の間隔 */ | + | |
- | } | + | |
- | + | ||
- | # | + | |
- | # | + | |
- | font-size: 1em; | + | |
- | /* フォントサイズの調整が必要な場合はここで設定 */ | + | |
- | } | + | |
- | + | ||
- | # | + | |
- | position: absolute; | + | |
- | right: 20px; | + | |
- | top: 20px; | + | |
- | padding: 10px 20px; | + | |
- | font-size: 0.7em; | + | |
- | color: white; | + | |
- | background-color: | + | |
- | border: none; | + | |
- | cursor: pointer; | + | |
- | } | + | |
- | </ | + | |
- | </ | + | |
- | + | ||
- | < | + | |
- | <div class=" | + | |
- | <div class=" | + | |
- | <span id=" | + | |
- | </ | + | |
- | + | ||
- | <!-- コマンドボタン --> | + | |
- | <button id=" | + | |
- | + | ||
- | <!-- コマンドパネル --> | + | |
- | <div id=" | + | |
- | <button id=" | + | |
- | <button id=" | + | |
- | <button id=" | + | |
- | <button id=" | + | |
- | <button id=" | + | |
- | <button id=" | + | |
- | </ | + | |
- | + | ||
- | </ | + | |
- | + | ||
- | < | + | |
- | (function () { | + | |
- | var scenes = [ | + | |
- | // シナリオテキストをここに挿入 | + | |
- | "& | + | |
- | "& | + | |
- | "1こんにちは1あをによし奈良の都は咲く花の薫ふがごとく今盛りなり。ひさかたの光のどけき春の日に静心なく花の散るらむ。あをによし奈良の都は咲く花の薫ふがごとく今盛りなり。ひさかたの光のどけき春の日に静心なく花の散るらむ。", | + | |
- | "& | + | |
- | "& | + | |
- | " | + | |
- | "& | + | |
- | " | + | |
- | "& | + | |
- | " | + | |
- | " | + | |
- | ]; | + | |
- | var currentScene = 0; | + | |
- | var typingSpeed = 50; | + | |
- | var displayText = document.getElementById(' | + | |
- | var gameContainer = document.getElementById(' | + | |
- | var timeoutId; | + | |
- | var backButton = document.getElementById(' | + | |
- | var yOffset = 0; // 背景画像のY軸オフセットの初期値を0に設定 | + | |
- | + | ||
- | function updateBackgroundImage(imageName) { | + | |
- | gameContainer.style.backgroundImage = " | + | |
- | // 背景画像の位置を更新 | + | |
- | gameContainer.style.backgroundPosition = " | + | |
- | } | + | |
- | + | ||
- | function updateScene(text, | + | |
- | if (text.startsWith("& | + | |
- | // & | + | |
- | var imageName = text.split(" | + | |
- | updateBackgroundImage(imageName); | + | |
- | if (isBackward) prevScene(); | + | |
- | else nextScene(); | + | |
- | } else if (text.startsWith("& | + | |
- | // & | + | |
- | var value = parseInt(text.split(" | + | |
- | if (!isNaN(value)) { // 値が数値であることを確認 | + | |
- | yOffset = value; | + | |
- | gameContainer.style.backgroundPosition = " | + | |
- | } | + | |
- | if (isBackward) prevScene(); | + | |
- | else nextScene(); | + | |
- | } else { | + | |
- | // テキスト表示 | + | |
- | displayText.innerHTML = ""; | + | |
- | typeWriter(text); | + | |
- | } | + | |
- | } | + | |
- | + | ||
- | function typeWriter(text) { | + | |
- | var index = 0; | + | |
- | function addCharacter() { | + | |
- | if (index < text.length) { | + | |
- | displayText.innerHTML += text.charAt(index); | + | |
- | index++; | + | |
- | clearTimeout(timeoutId); | + | |
- | timeoutId = setTimeout(addCharacter, | + | |
- | } | + | |
- | } | + | |
- | addCharacter(); | + | |
- | } | + | |
- | + | ||
- | function nextScene() { | + | |
- | currentScene++; | + | |
- | if (currentScene < scenes.length) { | + | |
- | updateScene(scenes[currentScene]); | + | |
- | } | + | |
- | } | + | |
- | + | ||
- | function prevScene() { | + | |
- | // 最初のシーンでは戻れない | + | |
- | if (currentScene > 0) { | + | |
- | clearTimeout(timeoutId); | + | |
- | currentScene--; | + | |
- | updateScene(scenes[currentScene], | + | |
- | } | + | |
- | } | + | |
- | + | ||
- | document.addEventListener(' | + | |
- | clearTimeout(timeoutId); | + | |
- | if (displayText.innerHTML !== scenes[currentScene] && !scenes[currentScene].startsWith("&" | + | |
- | // タイピング中にクリックされた場合、全文を表示 | + | |
- | displayText.innerHTML = scenes[currentScene]; | + | |
- | } else { | + | |
- | nextScene(); | + | |
- | } | + | |
- | }); | + | |
- | + | ||
- | backButton.addEventListener(' | + | |
- | event.stopPropagation(); | + | |
- | prevScene(); | + | |
- | }); | + | |
- | + | ||
- | var yOffset = 0; // 背景画像のY軸オフセットの初期値 | + | |
- | + | ||
- | function updateBackgroundImage(imageName) { | + | |
- | gameContainer.style.backgroundImage = " | + | |
- | // 背景画像の位置を更新 | + | |
- | gameContainer.style.backgroundPosition = " | + | |
- | } | + | |
- | + | ||
- | var autoMode = false; // オートモードの状態 | + | |
- | var autoModeIntervalId = null; // オートモードのインターバルID | + | |
- | + | ||
- | function toggleAutoMode() { | + | |
- | autoMode = !autoMode; | + | |
- | autoModeButton.textContent = autoMode ? " | + | |
- | if (autoMode) { | + | |
- | clearTimeout(timeoutId); | + | |
- | autoModeNextScene(); | + | |
- | } else { | + | |
- | clearTimeout(autoModeIntervalId); | + | |
- | } | + | |
- | } | + | |
- | + | ||
- | function autoModeNextScene() { | + | |
- | if (!autoMode) return; // オートモードが停止していたら終了 | + | |
- | nextScene(); | + | |
- | var delay = 4000; // デフォルトの遅延時間 | + | |
- | + | ||
- | // 現在のシーンがテキストの場合、その長さに基づいて遅延時間を調整 | + | |
- | if (!scenes[currentScene].startsWith("&" | + | |
- | delay += scenes[currentScene].length * typingSpeed; | + | |
- | } | + | |
- | + | ||
- | autoModeIntervalId = setTimeout(autoModeNextScene, | + | |
- | } | + | |
- | + | ||
- | document.getElementById(' | + | |
- | event.stopPropagation(); | + | |
- | toggleAutoMode(); | + | |
- | }); | + | |
- | + | ||
- | // 既存の nextScene 関数内... | + | |
- | function nextScene() { | + | |
- | currentScene++; | + | |
- | if (currentScene < scenes.length) { | + | |
- | updateScene(scenes[currentScene]); | + | |
- | if (autoMode) { | + | |
- | clearTimeout(autoModeIntervalId); | + | |
- | autoModeIntervalId = setTimeout(autoModeNextScene, | + | |
- | } | + | |
- | } else if (autoMode) { | + | |
- | toggleAutoMode(); | + | |
- | } | + | |
- | } | + | |
- | var dialogueBox = document.getElementById(' | + | |
- | var fontSize = 1.2; // 初期フォントサイズ(em) | + | |
- | + | ||
- | function updateFontSize() { | + | |
- | dialogueBox.style.fontSize = fontSize + ' | + | |
- | } | + | |
- | + | ||
- | document.getElementById(' | + | |
- | event.stopPropagation(); | + | |
- | fontSize += 0.5; | + | |
- | updateFontSize(); | + | |
- | }); | + | |
- | + | ||
- | document.getElementById(' | + | |
- | event.stopPropagation(); | + | |
- | fontSize = Math.max(fontSize - 0.5, 0.5); // フォントサイズが0.5em未満にならないようにする | + | |
- | updateFontSize(); | + | |
- | }); | + | |
- | + | ||
- | document.addEventListener(' | + | |
- | var commandButton = document.getElementById(' | + | |
- | var commandPanel = document.getElementById(' | + | |
- | var closePanelButton = document.getElementById(' | + | |
- | var resetButton = document.getElementById(' | + | |
- | + | ||
- | // コマンドボタンをクリックした時のイベント | + | |
- | commandButton.addEventListener(' | + | |
- | event.stopPropagation(); | + | |
- | commandPanel.style.display = ' | + | |
- | commandButton.style.display = ' | + | |
- | }); | + | |
- | + | ||
- | // 閉じるボタンをクリックした時のイベント | + | |
- | closePanelButton.addEventListener(' | + | |
- | event.stopPropagation(); | + | |
- | commandPanel.style.display = ' | + | |
- | commandButton.style.display = ' | + | |
- | }); | + | |
- | + | ||
- | // ページをリロードする | + | |
- | resetButton.addEventListener(' | + | |
- | window.location.reload(); | + | |
- | }); | + | |
- | // 既存のボタンイベント(戻る、オートモード、フォントサイズ変更)はそのまま | + | |
- | }); | + | |
- | // 初期シーンをロード | + | |
- | updateScene(scenes[currentScene]); | + | |
- | })(); | + | |
- | </ | + | |
- | </ | + | |
- | + | ||
- | </ | + |
実験場.1710104090.txt.gz · 最終更新: 2024/03/11 05:54 by tytinfo