设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
楼主: 小叮鈴
打印 上一主题 下一主题

[交流讨论] 有沒有辦法做一個彈奏鋼琴的

[复制链接]

Lv3.寻梦者

梦石
0
星屑
1232
在线时间
1017 小时
注册时间
2011-4-30
帖子
1516
11
发表于 2016-1-2 20:02:42 | 只看该作者
本帖最后由 汪汪 于 2016-1-2 20:06 编辑
andrewx 发表于 2016-1-2 19:52
其实思路很简单,你只要判断第几次按的键是不是你要求的,比如你要mi re do re mi mi mi,其实就是第一次 ...

直接修改值的话就可以越过变量只能输入数的问题了
也就是对 $gameVariables._data[id]  进行修改
不过不会触发 this.onChange()
不过可以加上一句 $gameVariables.onChange()

  1. //-----------------------------------------------------------------------------
  2. // Game_Variables
  3. // 游戏变量  $gameVariables
  4. // The game object class for variables.
  5. // 变量的游戏对象类

  6. function Game_Variables() {
  7.     this.initialize.apply(this, arguments);
  8. }
  9. //初始化
  10. Game_Variables.prototype.initialize = function() {
  11.     this.clear();
  12. };
  13. //清除
  14. Game_Variables.prototype.clear = function() {
  15.     this._data = [];
  16. };
  17. //值
  18. Game_Variables.prototype.value = function(variableId) {
  19.     return this._data[variableId] || 0;
  20. };
  21. //设置值
  22. Game_Variables.prototype.setValue = function(variableId, value) {
  23.     if (variableId > 0 && variableId < $dataSystem.variables.length) {
  24.         if (typeof value === 'number') {
  25.             value = Math.floor(value);
  26.         }
  27.         this._data[variableId] = value;
  28.         this.onChange();
  29.     }
  30. };
  31. //当改变
  32. Game_Variables.prototype.onChange = function() {
  33.     $gameMap.requestRefresh();
  34. };
复制代码

点评

就是说啊,这么搞了以后不用typeof都搞不清楚类型了ORZ  发表于 2016-1-2 22:48
不同的类型做运算就做隐式转换了,虽然字符串+整数会转换成字符串+字符串是比较反直觉  发表于 2016-1-2 22:40
理解成指针还好,但是不同类型之间运算总觉得怪怪的,而且RM还能把"23"直接在F9里假装成23,珍是没想到。这之后用事件指令+1也变成字符串合并了   发表于 2016-1-2 22:31
js所有的变量都当成c++的void*指针就好了  发表于 2016-1-2 21:37
xp时代纯小白一个,只会玩现成脚本,VX之后受不了那个分辨率和地图所以根本没碰过。所以其实我Ruby和RGSS并不怎么会ORZ。真心觉得js的变量很难搞懂...  发表于 2016-1-2 21:22
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
497
在线时间
266 小时
注册时间
2015-12-8
帖子
873
12
 楼主| 发表于 2016-1-2 20:56:05 | 只看该作者
andrewx 发表于 2016-1-2 19:52
其实思路很简单,你只要判断第几次按的键是不是你要求的,比如你要mi re do re mi mi mi,其实就是第一次 ...

恩恩~所以假如要依序輸入do mi do re mi

當觸發事件後,就建立一個公用事件設定並行

當A=1 B=1(do)就正確 B=2~7就錯誤中斷事件

當A=2 B=3(mi)就正確 B=1~2和4~7就錯誤中斷事件

當A=3 B=1(do)就正確 B=2~7就錯誤中斷事件

以此類推嗎? 總共六個音符就要建立六個公用事件嗎?
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
497
在线时间
266 小时
注册时间
2015-12-8
帖子
873
13
 楼主| 发表于 2016-1-2 20:57:07 | 只看该作者
汪汪 发表于 2016-1-2 19:46
判断时可以使用文本
比如
$gameVariables._data = ""

這是用樓上A和B的變量嗎?
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
55
在线时间
388 小时
注册时间
2009-8-4
帖子
219
14
发表于 2016-1-2 21:16:51 | 只看该作者
本帖最后由 andrewx 于 2016-1-2 21:18 编辑
小叮鈴 发表于 2016-1-2 20:56
恩恩~所以假如要依序輸入do mi do re mi

當觸發事件後,就建立一個公用事件設定並行

只用一个公共事件就行了,而且不需要并行。

地图上的钢琴按钮事件有7个代表七个音,每个触发之后首先播放声音,然后给A加1,再把B等于自身的那个数字,然后调用公共事件。
比如:


公共事件大致流程:


这样重复,你的正确旋律有几个音就重复几次,把第一层条件判定的A值往上加
最后一次增加一个成功的条件:


以上
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1232
在线时间
1017 小时
注册时间
2011-4-30
帖子
1516
15
发表于 2016-1-2 22:11:32 | 只看该作者
本帖最后由 汪汪 于 2016-1-2 22:24 编辑
小叮鈴 发表于 2016-1-2 20:57
這是用樓上A和B的變量嗎?
  1. if(!$gameVariables._data[1]){$gameVariables._data[1]="7"}else{$gameVariables._data[1] +=7}
复制代码

点评

结合楼上使用.....起码不需要使用那么多条件分歧  发表于 2016-1-2 22:40
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1232
在线时间
1017 小时
注册时间
2011-4-30
帖子
1516
16
发表于 2016-1-2 22:12:41 | 只看该作者
本帖最后由 汪汪 于 2016-1-3 00:10 编辑
小叮鈴 发表于 2016-1-2 20:57
這是用樓上A和B的變量嗎?

  1.         if (TouchInput.isRepeated()) {
  2.                //获取点击处x y  你可能需要用到
  3.                 var x = $gameMap.canvasToMapX(TouchInput.x);
  4.                 var y = $gameMap.canvasToMapY(TouchInput.y);
  5.                
  6.     }

复制代码
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
497
在线时间
266 小时
注册时间
2015-12-8
帖子
873
17
 楼主| 发表于 2016-1-2 23:48:29 | 只看该作者
汪汪 发表于 2016-1-2 22:11

不太離解這個腳本的意思,你可以把存檔給我看一下範例嗎^^

点评

这个脚本就是给变量添加"7" ,下面是对按了什么的判断.  发表于 2016-1-3 00:05
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
497
在线时间
266 小时
注册时间
2015-12-8
帖子
873
18
 楼主| 发表于 2016-1-2 23:50:36 | 只看该作者
andrewx 发表于 2016-1-2 21:16
只用一个公共事件就行了,而且不需要并行。

地图上的钢琴按钮事件有7个代表七个音,每个触发之后首先播放 ...


我還有一個笨問題

假如點鋼琴開始之後,就是在地圖上的事件觸發打開公用事件

這樣公用事件不是會直接整個跑完嗎?

打開公用事件之後 A=1 B還未有函數(因為還沒點任何鋼琴鍵) 這時候B就不等於1 直接顯示錯誤
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
55
在线时间
388 小时
注册时间
2009-8-4
帖子
219
19
发表于 2016-1-3 00:50:41 | 只看该作者
小叮鈴 发表于 2016-1-2 23:50
我還有一個笨問題

假如點鋼琴開始之後,就是在地圖上的事件觸發打開公用事件

公共事件只在触发了按键事件后被这个按键事件call起来,在这之前你的按键事件已经给B赋值了。然后它会检查现在是第几下(A的值)以及是否弹错(B的值)。每按一次键都会call一次公共事件来检测对错。看我的示例,第一张图就是第一个按键do的设置,其余的修改变量B的值依次为1~7
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
497
在线时间
266 小时
注册时间
2015-12-8
帖子
873
20
 楼主| 发表于 2016-1-3 01:45:40 | 只看该作者
andrewx 发表于 2016-1-3 00:50
公共事件只在触发了按键事件后被这个按键事件call起来,在这之前你的按键事件已经给B赋值了。然后它会检 ...

不太對阿 假如我第一個按對 這時候A=1 B=1 因為答對 所以A+1
這時候A=2 B=1
然後因為A=2 所以觸發了第二個條件 當A=2時 B不等於3
這時候因為才剛按下 所以B還是停留在B=1 就跳到下一個分支下去
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-12-23 01:22

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表