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

Project1

 找回密码
 注册会员
搜索
查看: 9773|回复: 37
打印 上一主题 下一主题

[交流讨论] MV 脚本初探

[复制链接]

Lv3.寻梦者 (版主)

…あたしは天使なんかじゃないわ

梦石
0
星屑
2208
在线时间
4033 小时
注册时间
2010-10-4
帖子
10779

开拓者贵宾

跳转到指定楼层
1
发表于 2015-10-31 16:32:36 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
本帖最后由 taroxd 于 2015-11-1 12:47 编辑

开了太鼓的坑(基本界面已经完成,现在是可以玩的状态),写了一小会儿的MV脚本,感想如下:

Controller:
    由于 html5 平台上异步io的特性,场景类必须提供更多的API。原先 VA 的 start 被拆分为 create(载入资源)和 start(载入完成后的处理)。
    场景还必须提供 isReady 方法,用于判断资源是否载入完成。

    至于场景处理的逻辑,写起来和VA几乎没有区别。
    总结起来,Controller 部分比 VA 写起来稍微麻烦一些,但差别不大。

Model:
    对于数据处理的部分,由于js原生提供的方法太少,所以比VA写起来会麻烦很多。
    举个例子,下面是两段几乎等价的代码:
RUBY 代码复制
  1. def init_notes_for_display
  2.   @notes_for_display = @notes.flatten.sort_by(&:appear_time)
  3. end


JAVASCRIPT 代码复制
  1. Taiko.Fumen.prototype.initNotesForDisplay = function() {
  2.     this._notesForDisplay = Array.prototype.concat.apply([], this._notes);
  3.     this._notesForDisplay.sort(function(a, b) {
  4.         return a.appearTime - b.appearTime;
  5.     });
  6. };


View:
    由于 addChild 机制以及资源不需释放的特点,这一部分的代码比 VA 会简单很多。事实上我在 VA 的太鼓里也是按照 addChild 的思路去写的。
    Sprite 和 Bitmap 用完不需要 dispose —— 还有比这更开心的事情吗?
    美中不足之处是,MV 似乎没有提供方法,将一个精灵以及它的 children 控制在画面上的一个区域(即 VA 的 viewport)。setFrame 可以控制当前的精灵,但是无法影响到 children。如果有这个方法而我没看到的话,请务必告诉我~

最后,给 XP/VX/VA 转 MV 的人一些小建议:
1. 不能省略 this。
2. 分清属性和方法。
3. Bitmap.load 以及 ImageManager 不能立刻返回加载完成的图像。除非确定资源已经加载完,否则不要访问该位图的属性。可以使用 addLoadListener。
4. 使用 Array.prototype.forEach/map/filter 等方法时,最好提供第二个参数 this。添加 listener 的时候,也最好把函数 bind(this)。这里的函数类似于 ruby 的 lambda 而不是 proc,确实是挺不方便的。
5. MV 支持的音频格式不止 ogg 和 m4a。
6. 不要省略分号。因为 ruby 在语法正确时,会将尽可能少行代码连成一句表达式;而 js 则相反,会尽可能读取更多行。
7. 使用 console.log 将对象输出到控制台。善用开发者工具。
8. 这个网址很棒:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript

Lv1.梦旅人

梦石
0
星屑
55
在线时间
69 小时
注册时间
2008-3-2
帖子
29
18
发表于 2016-10-5 19:14:05 | 只看该作者
版主写的这个完全不懂,能开个教学贴从易到难教教新人吗?

点评

本来就不是教程贴  发表于 2016-10-6 08:49
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (版主)

梦石
0
星屑
2310
在线时间
5538 小时
注册时间
2011-1-10
帖子
6619

青铜编剧史诗剧作家剧作品鉴家

17
发表于 2015-11-2 00:24:20 | 只看该作者
噢日……又是万恶的大括号和分号……前两年写C,程序错误不会报准确位置,然后一大行代码看下来居然是少了分号什么的,怨念极深啊……
到底还是喜欢Ruby的直接换行。

点评

js 少个分号不会有太大问题。不过万一被坑到就不好了  发表于 2015-11-2 07:03
回复 支持 反对

使用道具 举报

Lv6.析梦学徒

Fuzzy Ginkgo
Taciturn Knight

梦石
0
星屑
60725
在线时间
1933 小时
注册时间
2010-6-26
帖子
1605

烫烫烫开拓者

16
发表于 2015-11-1 12:27:39 | 只看该作者
本帖最后由 orzfly 于 2015-11-1 12:30 编辑
  1. Array.prototype.concat.apply([], [[{a:"a",appearTime:1}, {a:"b",appearTime:2}],[{a:"d",appearTime:4}, {a:"c",appearTime:3}]]).sort(function(a, b) {return a.appearTime - b.appearTime;});
复制代码
虽然最前面和 flatten 还是有一定本质区别的逃(

如果有 lodash,那可以
  1. _([[{a:"a",appearTime:1}, {a:"b",appearTime:2}],[{a:"d",appearTime:4}, {a:"c",appearTime:3}]]).flatten().sortBy("appearTime").value()
复制代码

点评

不过也有 Array#reduce……  发表于 2015-11-1 12:44
谢谢。js 不熟,忘了 apply 这个黑科技了(这种用法我只用过 Math.max.apply)  发表于 2015-11-1 12:42
我的言论只代表我个人的观点,不代表雇主及/或任何第三方的立场。
Opinions expressed are solely my own and do not express the views or opinions of my employer and/or any third parties.
捐赠 | GitHub
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
697
在线时间
374 小时
注册时间
2009-3-9
帖子
398
15
发表于 2015-11-1 11:51:55 | 只看该作者
taroxd 发表于 2015-11-1 10:45
如果不需要把所有 children 的图片砍掉半截,只需要整体移动的话,那么 sprite 已经充分胜任这个功能了。 ...

其实就是砍掉这个功能很好用,不过也无所谓了。。。。。
新手学习中.....努力吧!!
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (版主)

…あたしは天使なんかじゃないわ

梦石
0
星屑
2208
在线时间
4033 小时
注册时间
2010-10-4
帖子
10779

开拓者贵宾

14
 楼主| 发表于 2015-11-1 10:45:20 | 只看该作者
ky52879 发表于 2015-11-1 10:11
请教各位,大家找到Viewport了吗??

如果不需要把所有 children 的图片砍掉半截,只需要整体移动的话,那么 sprite 已经充分胜任这个功能了。

否则……我还没找到
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
697
在线时间
374 小时
注册时间
2009-3-9
帖子
398
13
发表于 2015-11-1 10:11:42 | 只看该作者
请教各位,大家找到Viewport了吗??
新手学习中.....努力吧!!
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (版主)

…あたしは天使なんかじゃないわ

梦石
0
星屑
2208
在线时间
4033 小时
注册时间
2010-10-4
帖子
10779

开拓者贵宾

12
 楼主| 发表于 2015-11-1 06:46:42 | 只看该作者
本帖最后由 taroxd 于 2015-11-1 06:48 编辑
trentswd 发表于 2015-11-1 03:20
看见pixi论坛里面的人说,pixi的sprite和bitmap都要手动destroy,js的gc也不会自定销毁webgl的context
我 ...


没有。至少看默认脚本是没有用到过 destroy 的
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
65
在线时间
385 小时
注册时间
2007-7-27
帖子
4106

开拓者

11
发表于 2015-11-1 03:20:14 | 只看该作者
Sprite 和 Bitmap 用完不需要 dispose —— 还有比这更开心的事情吗?

看见pixi论坛里面的人说,pixi的sprite和bitmap都要手动destroy,js的gc也不会自定销毁webgl的context
我想问一下楼主遇到过内存问题吗?
吸吸
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
3258
在线时间
1120 小时
注册时间
2009-4-15
帖子
815
10
发表于 2015-10-31 22:55:33 | 只看该作者
看了MV的代码,我觉得我要屎了……我决定当个伸手党就好……求大神带我装X带我飞……
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-6-12 18:50

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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