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

Project1

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

[已经解决] 怎么获取某一格的颜色或者判断某事件是否被图片覆盖?

[复制链接]

Lv3.寻梦者

梦石
0
星屑
1244
在线时间
898 小时
注册时间
2014-12-4
帖子
379
跳转到指定楼层
1
发表于 2016-3-7 22:17:22 手机端发表。 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 翻滚牛宝宝 于 2016-3-8 08:01 编辑

怎么获取颜色或者判断某事件是否被某图片上有颜色的部分覆盖作为判断的条件?

Lv3.寻梦者

梦石
0
星屑
1232
在线时间
1017 小时
注册时间
2011-4-30
帖子
1516
2
发表于 2016-3-8 10:44:28 | 只看该作者
额,你这个图片是怎样的形式使用的?

点评

就是显示图片……  发表于 2016-3-8 11:06
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1244
在线时间
898 小时
注册时间
2014-12-4
帖子
379
3
 楼主| 发表于 2016-3-8 11:06:02 | 只看该作者
就是显示图片那个

点评

图片点击响应脚本是怎么实现判断的?  发表于 2016-3-8 11:46
很麻烦......关键是图片还会旋转.....  发表于 2016-3-8 11:40
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1232
在线时间
1017 小时
注册时间
2011-4-30
帖子
1516
4
发表于 2016-3-8 11:45:33 | 只看该作者
这些大概是能用到的方法,不过不知道怎么写....

  1. /**返回指定点像素的颜色。
  2. * Returns pixel color at the specified point.
  3. *
  4. * @method getPixel
  5. * @param {Number} x The x coordinate of the pixel in the bitmap
  6. * @param {Number} y The y coordinate of the pixel in the bitmap
  7. * @return {String} The pixel color (hex format)
  8. */
  9. Bitmap.prototype.getPixel = function(x, y) {
  10.     var data = this._context.getImageData(x, y, 1, 1).data;
  11.     var result = '#';
  12.     for (var i = 0; i < 3; i++) {
  13.         result += data[i].toString(16).padZero(2);
  14.     }
  15.     return result;
  16. };

  17. /**返回指定点alpha像素值。
  18. * Returns alpha pixel value at the specified point.
  19. *
  20. * @method getAlphaPixel
  21. * @param {Number} x The x coordinate of the pixel in the bitmap
  22. * @param {Number} y The y coordinate of the pixel in the bitmap
  23. * @return {String} The alpha value
  24. */
  25. Bitmap.prototype.getAlphaPixel = function(x, y) {
  26.     var data = this._context.getImageData(x, y, 1, 1).data;
  27.     return data[3];
  28. };
复制代码
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1244
在线时间
898 小时
注册时间
2014-12-4
帖子
379
5
 楼主| 发表于 2016-3-8 11:53:36 | 只看该作者
汪汪 发表于 2016-3-8 11:45
这些大概是能用到的方法,不过不知道怎么写....

我的思路是这样的 首先判断事件所在位置是不是这个图片覆盖的,然后判断这个位置有没有颜色…… 可是不会写……
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1244
在线时间
898 小时
注册时间
2014-12-4
帖子
379
6
 楼主| 发表于 2016-3-8 12:00:54 | 只看该作者
汪汪 发表于 2016-3-8 11:45
这些大概是能用到的方法,不过不知道怎么写....

或者大神帮我参考下 PictureCallCommon.js这个插件,怎么实现判断某个点是否是在某个图上,插件原文
  1. //=============================================================================
  2. // PictureCallCommon.js
  3. // ----------------------------------------------------------------------------
  4. // Copyright (c) 2015 Triacontane
  5. // This plugin is released under the MIT License.
  6. // http://opensource.org/licenses/mit-license.php
  7. // ----------------------------------------------------------------------------
  8. // Version
  9. // 1.3.0 2016/01/24 ピクチャをなでなでする機能を追加
  10. //                  トリガーにマウスムーブを追加
  11. //                  ピクチャが回転しているときに正しく位置を補足できるよう修正
  12. // 1.2.1 2016/01/21 呼び出すコモンイベントの上限を100から1000(DB上の最大値)に修正
  13. //                  競合対策(YEP_MessageCore.js)
  14. // 1.2.0 2016/01/14 ホイールクリック、ダブルクリックなどトリガーを10種類に拡充
  15. // 1.1.3 2016/01/02 競合対策(TDDP_BindPicturesToMap.js)
  16. // 1.1.2 2015/12/20 長押しイベント発生時に1秒間のインターバルを設定するよう仕様変更
  17. // 1.1.1 2015/12/10 ピクチャを消去後にマウスオーバーするとエラーになる現象を修正
  18. // 1.1.0 2015/11/23 コモンイベントを呼び出した対象のピクチャ番号を特定する機能を追加
  19. //                  設定で透明色を考慮する機能を追加
  20. //                  トリガーとして「右クリック」や「長押し」を追加
  21. // 1.0.0 2015/11/14 初版
  22. // ----------------------------------------------------------------------------
  23. // [Blog]   : http://triacontane.blogspot.jp/
  24. // [Twitter]: https://twitter.com/triacontane/
  25. // [GitHub] : https://github.com/triacontane/
  26. //=============================================================================

  27. /*:ja
  28. * @plugindesc ピクチャのボタン化プラグイン
  29. * @author トリアコンタン
  30. *
  31. * @param 透明色を考慮
  32. * @desc クリックされた箇所が透明色だった場合は、クリックを無効にする。
  33. * @default OFF
  34. *
  35. * @param ピクチャ番号の変数番号
  36. * @desc コモンイベント呼び出し時にピクチャ番号を格納するゲーム変数の番号。
  37. * @default 0
  38. *
  39. * @param ポインタX座標の変数番号
  40. * @desc マウスカーソルもしくはタッチした位置のX座標を常に格納するゲーム変数の番号
  41. * @default 0
  42. *
  43. * @param ポインタY座標の変数番号
  44. * @desc マウスカーソルもしくはタッチした位置のY座標を常に格納するゲーム変数の番号
  45. * @default 0
  46. *
  47. * @help ピクチャをクリックすると、指定したコモンイベントが
  48. * 呼び出されるようになるプラグインコマンドを提供します。
  49. * このプラグインを利用すれば、javascriptの知識がなくても
  50. * 誰でも簡単にクリックやタッチを主体にしたゲームを作れます。
  51. *
  52. * 注意!
  53. * 一度関連づけたピクチャとコモンイベントはピクチャを消去しても有効です。
  54. * ピクチャが存在しなければどこをクリックしても反応しませんが、
  55. * 同じ番号で再度、ピクチャの表示を行うと反応するようになります。
  56. *
  57. * プラグインコマンド詳細
  58. *  イベントコマンド「プラグインコマンド」から実行。
  59. *  (引数の間は半角スペースで区切る)
  60. *
  61. *  ピクチャのボタン化 or
  62. *  P_CALL_CE [ピクチャ番号] [コモンイベントID] [トリガー]:
  63. *      ピクチャの領域内でトリガー条件を満たした場合に呼び出されるコモンイベントを関連づけます。
  64. *    トリガーは以下の通りです。(省略すると 1 になります)
  65. *      1  : クリックした場合
  66. *      2  : 右クリックした場合
  67. *      3  : 長押しした場合
  68. *      4  : マウスをピクチャに重ねた場合
  69. *      5  : マウスをピクチャから放した場合
  70. *      6  : クリックを解放(リリース)した場合
  71. *      7  : クリックした場合(かつ長押しの際の繰り返しを考慮)
  72. *      8  : クリックしている間ずっと
  73. *      9  : ホイールクリックした場合(PCの場合のみ有効)
  74. *      10 : ダブルクリックした場合
  75. *      11 : マウスを移動した場合
  76. *
  77. *  例:P_CALL_CE 1 3 7
  78. *   :ピクチャのボタン化 \v[1] \v[2] \v[3]
  79. *
  80. *  ピクチャのボタン化解除 or
  81. *  P_CALL_CE_REMOVE [ピクチャ番号] :
  82. *      ピクチャとコモンイベントの関連づけを解除します。
  83. *      全てのトリガーが削除対象です。
  84. *
  85. *  例:P_CALL_CE_REMOVE 1
  86. *   :ピクチャのボタン化解除 \v[1]
  87. *
  88. *  ピクチャのなでなで設定 or
  89. *  P_STROKE [ピクチャ番号] [変数番号]
  90. *    指定したピクチャの上でマウスやタッチを動かすと、
  91. *    速さに応じた値が指定した変数に値が加算されるようになります。
  92. *    この設定はピクチャを差し替えたり、一時的に非表示にしても有効です。
  93. *    10秒でだいたい1000くらいまで溜まります。
  94. *
  95. *  例:P_STROKE 1 2
  96. *   :ピクチャのなでなで設定 \v[1] \v[2] \v[3]
  97. *
  98. *  ピクチャのなでなで解除 or
  99. *  P_STROKE_REMOVE [ピクチャ番号]
  100. *    指定したピクチャのなでなで設定を解除します。
  101. *
  102. *  例:P_STROKE_REMOVE 1
  103. *   :ピクチャのなでなで解除 \v[1]
  104. *
  105. *  ピクチャのポインタ化 or
  106. *  P_POINTER [ピクチャ番号]
  107. *    指定したピクチャがタッチ座標を自動で追従するようになります。
  108. *    タッチしていないと自動で非表示になります。
  109. *
  110. *  例:P_POINTER 1
  111. *   :ピクチャのポインタ化 \v[1]
  112. *
  113. *  ピクチャのポインタ化解除 or
  114. *  P_POINTER_REMOVE [ピクチャ番号]
  115. *    指定したピクチャのポインタ化を解除します。
  116. *
  117. *  例:P_POINTER_REMOVE 1
  118. *   :ピクチャのポインタ化解除 \v[1]
  119. *
  120. * 利用規約:
  121. *  作者に無断で改変、再配布が可能で、利用形態(商用、18禁利用等)
  122. *  についても制限はありません。
  123. *  このプラグインはもうあなたのものです。
  124. */
  125. /*:
  126. * @plugindesc Clickable picture plugin
  127. * @author triacontane
  128. *
  129. * @param TransparentConsideration
  130. * @desc if click position is transparent, click is disabled.
  131. * @default OFF
  132. *
  133. * @param GameVariablePictureNum
  134. * @desc Game variable number that stores the picture number when common event called.
  135. * @default 0
  136. *
  137. * @param GameVariableTouchX
  138. * @desc Game variable number that stores touch x position
  139. * @default 0
  140. *
  141. * @param GameVariableTouchY
  142. * @desc Game variable number that stores touch y position
  143. * @default 0
  144. *
  145. * @help When clicked picture, call common event.
  146. *
  147. * Plugin Command
  148. *
  149. *  P_CALL_CE [Picture number] [Common event ID] [Trigger]:
  150. *      When picture was clicked, assign common event id.
  151. *    Trigger are As below(if omit, It is specified to 1)
  152. *      1  : Left click
  153. *      2  : Right click
  154. *      3  : Long click
  155. *      4  : Mouse over
  156. *      5  : Mouse out
  157. *      6  : Mouse release
  158. *      7  : Mouse repeat click
  159. *      8  : Mouse press
  160. *      9  : Wheel click
  161. *      10 : Double click
  162. *      11 : Mouse move
  163. *
  164. *  P_CALL_CE_REMOVE [Picture number] :
  165. *      break relation from picture to common event.
  166. *
  167. *  This plugin is released under the MIT License.
  168. */
  169. (function () {
  170.     'use strict';
  171.     var pluginName = 'PictureCallCommon';

  172.     var getParamOther = function(paramNames) {
  173.         if (!Array.isArray(paramNames)) paramNames = [paramNames];
  174.         for (var i = 0; i < paramNames.length; i++) {
  175.             var name = PluginManager.parameters(pluginName)[paramNames[i]];
  176.             if (name) return name;
  177.         }
  178.         return null;
  179.     };

  180.     var getParamBoolean = function(paramNames) {
  181.         var value = getParamOther(paramNames);
  182.         return (value || '').toUpperCase() == 'ON';
  183.     };

  184.     var getParamNumber = function(paramNames, min, max) {
  185.         var value = getParamOther(paramNames);
  186.         if (arguments.length < 2) min = -Infinity;
  187.         if (arguments.length < 3) max = Infinity;
  188.         return (parseInt(value, 10) || 0).clamp(min, max);
  189.     };

  190.     var getCommandName = function(command) {
  191.         return (command || '').toUpperCase();
  192.     };

  193.     var getArgNumber = function (arg, min, max) {
  194.         if (arguments.length < 2) min = -Infinity;
  195.         if (arguments.length < 3) max = Infinity;
  196.         return (parseInt(convertEscapeCharacters(arg), 10) || 0).clamp(min, max);
  197.     };

  198.     var convertEscapeCharacters = function(text) {
  199.         if (text == null) text = '';
  200.         var window = SceneManager._scene._windowLayer.children[0];
  201.         return window ? window.convertEscapeCharacters(text) : text;
  202.     };

  203.     if (!Object.prototype.hasOwnProperty('iterate')) {
  204.         Object.defineProperty(Object.prototype, 'iterate', {
  205.             value: function(handler) {
  206.                 Object.keys(this).forEach(function(key, index) {
  207.                     handler.call(this, key, this[key], index);
  208.                 }, this);
  209.             }
  210.         });
  211.     }

  212.     //=============================================================================
  213.     // Game_Interpreter
  214.     //  プラグインコマンド[P_CALL_CE]などを追加定義します。
  215.     //=============================================================================
  216.     var _Game_Interpreter_pluginCommand      = Game_Interpreter.prototype.pluginCommand;
  217.     Game_Interpreter.prototype.pluginCommand = function (command, args) {
  218.         _Game_Interpreter_pluginCommand.call(this, command, args);
  219.         var pictureId, commonId, trigger, variableNum;
  220.         switch (getCommandName(command)) {
  221.             case 'P_CALL_CE' :
  222.             case 'ピクチャのボタン化':
  223.                 pictureId = getArgNumber(args[0], 1, $gameScreen.maxPictures());
  224.                 commonId  = getArgNumber(args[1], 1, $dataCommonEvents.length - 1);
  225.                 trigger   = getArgNumber(args[2], 1, 11);
  226.                 $gameScreen.setPictureCallCommon(pictureId, commonId, trigger);
  227.                 break;
  228.             case 'P_CALL_CE_REMOVE' :
  229.             case 'ピクチャのボタン化解除':
  230.                 pictureId = getArgNumber(args[0], 1, $gameScreen.maxPictures());
  231.                 $gameScreen.setPictureRemoveCommon(pictureId);
  232.                 break;
  233.             case 'P_STROKE' :
  234.             case 'ピクチャのなでなで設定':
  235.                 pictureId = getArgNumber(args[0], 1, $gameScreen.maxPictures());
  236.                 variableNum  = getArgNumber(args[1], 1, $dataSystem.variables.length - 1);
  237.                 $gameScreen.setPictureStroke(pictureId, variableNum);
  238.                 break;
  239.             case 'P_STROKE_REMOVE' :
  240.             case 'ピクチャのなでなで解除':
  241.                 pictureId = getArgNumber(args[0], 1, $gameScreen.maxPictures());
  242.                 $gameScreen.removePictureStroke(pictureId);
  243.                 break;
  244.             case 'P_POINTER' :
  245.             case 'ピクチャのポインタ化':
  246.                 pictureId = getArgNumber(args[0], 1, $gameScreen.maxPictures());
  247.                 $gameScreen.setPicturePointer(pictureId);
  248.                 break;
  249.             case 'P_POINTER_REMOVE' :
  250.             case 'ピクチャのポインタ化解除':
  251.                 pictureId = getArgNumber(args[0], 1, $gameScreen.maxPictures());
  252.                 $gameScreen.removePicturePointer(pictureId);
  253.                 break;
  254.         }
  255.     };

  256.     //=============================================================================
  257.     // Game_Temp
  258.     //  呼び出し予定のコモンイベントIDのフィールドを追加定義します。
  259.     //=============================================================================
  260.     var _Game_Temp_initialize = Game_Temp.prototype.initialize;
  261.     Game_Temp.prototype.initialize = function() {
  262.         _Game_Temp_initialize.call(this);
  263.         this.clearPictureCallInfo();
  264.     };

  265.     Game_Temp.prototype.clearPictureCallInfo = function() {
  266.         this.setPictureCallInfo(0, 0);
  267.     };

  268.     Game_Temp.prototype.setPictureCallInfo = function(pictureCommonId, pictureNum) {
  269.         this._pictureCommonId = pictureCommonId;
  270.         this._pictureNum      = pictureNum;
  271.     };

  272.     Game_Temp.prototype.pictureCommonId = function() {
  273.         return this._pictureCommonId;
  274.     };

  275.     Game_Temp.prototype.pictureNum = function() {
  276.         return this._pictureNum;
  277.     };

  278.     //=============================================================================
  279.     // Game_Map
  280.     //  ピクチャがタッチされたときのコモンイベント呼び出し処理を追加定義します。
  281.     //=============================================================================
  282.     var _Game_Map_setupStartingEvent = Game_Map.prototype.setupStartingEvent;
  283.     Game_Map.prototype.setupStartingEvent = function() {
  284.         var result = _Game_Map_setupStartingEvent.call(this);
  285.         return result || this.setupPictureCommonEvent();
  286.     };

  287.     Game_Map.prototype.setupPictureCommonEvent = function() {
  288.         var commonId = $gameTemp._pictureCommonId;
  289.         var event    = $dataCommonEvents[commonId];
  290.         var result   = false;
  291.         if (commonId > 0 && !this.isEventRunning() && event) {
  292.             var gameValueNum = getParamNumber(['GameVariablePictureNum', 'ピクチャ番号の変数番号'],
  293.                 0, $dataSystem.variables.length);
  294.             if (gameValueNum !== 0) $gameVariables.setValue(gameValueNum, $gameTemp.pictureNum());
  295.             this._interpreter.setup(event.list);
  296.             result = true;
  297.         }
  298.         $gameTemp.clearPictureCallInfo();
  299.         return result;
  300.     };

  301.     //=============================================================================
  302.     // Game_Troop
  303.     //  ピクチャがタッチされたときのコモンイベント呼び出し処理を追加定義します。
  304.     //=============================================================================
  305.     Game_Troop.prototype.setupPictureCommonEvent = function() {
  306.         var commonId = $gameTemp.pictureCommonId();
  307.         var event = $dataCommonEvents[commonId];
  308.         if (commonId > 0 && !this.isEventRunning() && event) {
  309.             var gameValueNum = getParamNumber(['GameVariablePictureNum', 'ピクチャ番号の変数番号'],
  310.                 0, $dataSystem.variables.length);
  311.             if (gameValueNum !== 0) $gameVariables.setValue(gameValueNum, $gameTemp.pictureNum());
  312.             this._interpreter.setup(event.list);
  313.         }
  314.         $gameTemp.clearPictureCallInfo();
  315.     };

  316.     //=============================================================================
  317.     // Game_Screen
  318.     //  ピクチャに対応するコモンイベント呼び出し用のID配列を追加定義します。
  319.     //=============================================================================
  320.     var _Game_Screen_initialize = Game_Screen.prototype.initialize;
  321.     Game_Screen.prototype.initialize = function() {
  322.         _Game_Screen_initialize.call(this);
  323.         this._pictureCidArray = [];
  324.         this._pictureSidArray = [];
  325.         this._picturePidArray = [];
  326.     };

  327.     var _Game_Screen_update = Game_Screen.prototype.update;
  328.     Game_Screen.prototype.update = function() {
  329.         _Game_Screen_update.apply(this, arguments);
  330.         this.updatePointer();
  331.     };

  332.     Game_Screen.prototype.updatePointer = function() {
  333.         var paramTouchX = getParamNumber(['GameVariableTouchX', 'ポインタX座標の変数番号'],
  334.             0, $dataSystem.variables.length);
  335.         var paramTouchY = getParamNumber(['GameVariableTouchY', 'ポインタY座標の変数番号'],
  336.             0, $dataSystem.variables.length);
  337.         if (paramTouchX > 0) $gameVariables.setValue(paramTouchX, TouchInput.x);
  338.         if (paramTouchY > 0) $gameVariables.setValue(paramTouchY, TouchInput.y);
  339.     };

  340.     Game_Screen.prototype.setPictureCallCommon = function(pictureId, commonId, trigger) {
  341.         var realPictureId = this.realPictureId(pictureId);
  342.         if (this._pictureCidArray[realPictureId] == null) this._pictureCidArray[realPictureId] = [];
  343.         this._pictureCidArray[realPictureId][trigger] = commonId;
  344.     };

  345.     Game_Screen.prototype.setPictureRemoveCommon = function(pictureId) {
  346.         var realPictureId = this.realPictureId(pictureId);
  347.         this._pictureCidArray[realPictureId] = [];
  348.     };

  349.     Game_Screen.prototype.setPictureStroke = function(pictureId, variableNum) {
  350.         var realPictureId = this.realPictureId(pictureId);
  351.         this._pictureSidArray[realPictureId] = variableNum;
  352.     };

  353.     Game_Screen.prototype.removePictureStroke = function(pictureId) {
  354.         var realPictureId = this.realPictureId(pictureId);
  355.         this._pictureSidArray[realPictureId] = null;
  356.     };

  357.     Game_Screen.prototype.setPicturePointer = function(pictureId) {
  358.         var realPictureId = this.realPictureId(pictureId);
  359.         this._picturePidArray[realPictureId] = true;
  360.     };

  361.     Game_Screen.prototype.removePicturePointer = function(pictureId) {
  362.         var realPictureId = this.realPictureId(pictureId);
  363.         this._picturePidArray[realPictureId] = null;
  364.     };

  365.     Game_Screen.prototype.getPictureCid = function(pictureId) {
  366.         var realPictureId = this.realPictureId(pictureId);
  367.         return this._pictureCidArray[realPictureId];
  368.     };

  369.     Game_Screen.prototype.getPictureSid = function(pictureId) {
  370.         var realPictureId = this.realPictureId(pictureId);
  371.         return this._pictureSidArray[realPictureId];
  372.     };

  373.     Game_Screen.prototype.getPicturePid = function(pictureId) {
  374.         var realPictureId = this.realPictureId(pictureId);
  375.         return this._picturePidArray[realPictureId];
  376.     };

  377.     //=============================================================================
  378.     // Scene_Map
  379.     //  ピクチャのタッチ状態からのコモンイベント呼び出し予約を追加定義します。
  380.     //=============================================================================
  381.     var _Scene_Map_update = Scene_Map.prototype.update;
  382.     Scene_Map.prototype.update = function() {
  383.         if (!$gameMap.isEventRunning()) this.updateTouchPictures();
  384.         _Scene_Map_update.call(this);
  385.     };

  386.     Scene_Map.prototype.updateTouchPictures = function() {
  387.         this._spriteset.callTouchPictures();
  388.     };

  389.     var _Scene_Map_isMapTouchOk = Scene_Map.prototype.isMapTouchOk;
  390.     Scene_Map.prototype.isMapTouchOk = function() {
  391.         return _Scene_Map_isMapTouchOk.call(this) && $gameTemp.pictureCommonId() === 0;
  392.     };

  393.     //=============================================================================
  394.     // Scene_Battle
  395.     //  ピクチャのタッチ状態からのコモンイベント呼び出し予約を追加定義します。
  396.     //=============================================================================
  397.     var _Scene_Battle_update = Scene_Battle.prototype.update;
  398.     Scene_Battle.prototype.update = function() {
  399.         this.updateTouchPictures();
  400.         $gameTroop.setupPictureCommonEvent();
  401.         _Scene_Battle_update.call(this);
  402.     };

  403.     Scene_Battle.prototype.updateTouchPictures = function() {
  404.         this._spriteset.callTouchPictures();
  405.     };

  406.     //=============================================================================
  407.     // Spriteset_Base
  408.     //  ピクチャのタッチ状態からのコモンイベント呼び出し予約を追加定義します。
  409.     //=============================================================================
  410.     Spriteset_Base.prototype.callTouchPictures = function() {
  411.         var containerChildren = this._pictureContainer.children;
  412.         if (!Array.isArray(containerChildren))  {
  413.             this._pictureContainer.iterate(function (property) {
  414.                 if (this._pictureContainer[property].hasOwnProperty('children')) {
  415.                     containerChildren = this._pictureContainer[property].children;
  416.                     this._callTouchPicturesSub(containerChildren);
  417.                 }
  418.             }.bind(this));
  419.         } else {
  420.             this._callTouchPicturesSub(containerChildren);
  421.         }
  422.     };

  423.     Spriteset_Base.prototype._callTouchPicturesSub = function(containerChildren) {
  424.         containerChildren.forEach(function(picture) {
  425.             if (typeof picture.callTouch === 'function') picture.callTouch();
  426.         }, this);
  427.     };

  428.     //=============================================================================
  429.     // Sprite_Picture
  430.     //  ピクチャのタッチ状態からのコモンイベント呼び出し予約を追加定義します。
  431.     //=============================================================================
  432.     var _Sprite_Picture_initialize = Sprite_Picture.prototype.initialize;
  433.     Sprite_Picture.prototype.initialize = function(pictureId) {
  434.         _Sprite_Picture_initialize.call(this, pictureId);
  435.         this._triggerHandler = [];
  436.         this._triggerHandler[1]        = this.isTriggered;
  437.         this._triggerHandler[2]        = this.isCancelled;
  438.         this._triggerHandler[3]        = this.isLongPressed;
  439.         this._triggerHandler[4]        = this.isOnFocus;
  440.         this._triggerHandler[5]        = this.isOutFocus;
  441.         this._triggerHandler[6]        = this.isReleased;
  442.         this._triggerHandler[7]        = this.isRepeated;
  443.         this._triggerHandler[8]        = this.isPressed;
  444.         this._triggerHandler[9]        = this.isWheelTriggered;
  445.         this._triggerHandler[10]       = this.isDoubleTriggered;
  446.         this._triggerHandler[11]       = this.isMoved;
  447.         this._onMouse                  = false;
  448.         this._outMouse                 = false;
  449.         this._wasOnMouse               = false;
  450.         this._transparentConsideration = getParamBoolean(['TransparentConsideration', '透明色を考慮']);
  451.     };

  452.     var _Sprite_update = Sprite_Picture.prototype.update;
  453.     Sprite_Picture.prototype.update = function() {
  454.         _Sprite_update.call(this);
  455.         this.updateMouseMove();
  456.         this.updateStroke();
  457.         this.updatePointer();
  458.     };

  459.     Sprite_Picture.prototype.updateMouseMove = function() {
  460.         this._onMouse  = false;
  461.         this._outMouse = false;
  462.         if (TouchInput.isMoved()) {
  463.             if (this.isTouchable() && this.isTouchPosInRect() && !this.isTransparent()) {
  464.                 if (!this._wasOnMouse) {
  465.                     this._onMouse    = true;
  466.                     this._wasOnMouse = true;
  467.                 }
  468.             } else {
  469.                 if (this._wasOnMouse) {
  470.                     this._outMouse   = true;
  471.                     this._wasOnMouse = false;
  472.                 }
  473.             }
  474.         }
  475.     };

  476.     Sprite_Picture.prototype.updateStroke = function() {
  477.         var strokeNum = $gameScreen.getPictureSid(this._pictureId);
  478.         if (strokeNum > 0 && TouchInput.isPressed()) {
  479.             var value = $gameVariables.value(strokeNum);
  480.             $gameVariables.setValue(strokeNum, value + TouchInput.pressedDistance);
  481.         }
  482.     };

  483.     Sprite_Picture.prototype.updatePointer = function() {
  484.         var strokeNum = $gameScreen.getPicturePid(this._pictureId);
  485.         if (strokeNum > 0) {
  486.             this.opacity = TouchInput.isPressed() ? 255 : 0;
  487.             this.x = TouchInput.x;
  488.             this.y = TouchInput.y;
  489.             this.anchor.x = 0.5;
  490.             this.anchor.y = 0.5;
  491.         }
  492.     };

  493.     Sprite_Picture.prototype.callTouch = function() {
  494.         var commandIds = $gameScreen.getPictureCid(this._pictureId);
  495.         if (commandIds == null) return;
  496.         this._triggerHandler.iterate(function(i, handler) {
  497.             if (handler && commandIds[i] != null && handler.call(this) && (i === 5 || i === 4 || !this.isTransparent())) {
  498.                 if (i === 3) TouchInput._pressedTime = -60;
  499.                 $gameTemp.setPictureCallInfo(commandIds[i], this._pictureId);
  500.             }
  501.         }.bind(this));
  502.     };

  503.     Sprite_Picture.prototype.isTransparent = function () {
  504.         if (!this._transparentConsideration) return false;
  505.         var dx = TouchInput.x - this.x;
  506.         var dy = TouchInput.y - this.y;
  507.         var sin = Math.sin(-this.rotation);
  508.         var cos = Math.cos(-this.rotation);
  509.         var bx = Math.floor(dx * cos + dy * -sin) / this.scale.x + this.anchor.x * this.width;
  510.         var by = Math.floor(dx * sin + dy * cos)  / this.scale.y + this.anchor.y * this.height;
  511.         return this.bitmap.getAlphaPixel(bx, by) === 0;
  512.     };

  513.     Sprite_Picture.prototype.screenWidth = function() {
  514.         return (this.width || 0) * this.scale.x;
  515.     };

  516.     Sprite_Picture.prototype.screenHeight = function() {
  517.         return (this.height || 0) * this.scale.y;
  518.     };

  519.     Sprite_Picture.prototype.screenX = function() {
  520.         return (this.x || 0) - this.anchor.x * this.screenWidth();
  521.     };

  522.     Sprite_Picture.prototype.screenY = function() {
  523.         return (this.y || 0) - this.anchor.y * this.screenHeight();
  524.     };

  525.     Sprite_Picture.prototype.minX = function() {
  526.         return Math.min(this.screenX(), this.screenX() + this.screenWidth());
  527.     };

  528.     Sprite_Picture.prototype.minY = function() {
  529.         return Math.min(this.screenY(), this.screenY() + this.screenHeight());
  530.     };

  531.     Sprite_Picture.prototype.maxX = function() {
  532.         return Math.max(this.screenX(), this.screenX() + this.screenWidth());
  533.     };

  534.     Sprite_Picture.prototype.maxY = function() {
  535.         return Math.max(this.screenY(), this.screenY() + this.screenHeight());
  536.     };

  537.     Sprite_Picture.prototype.isTouchPosInRect = function () {
  538.         var dx = TouchInput.x - this.x;
  539.         var dy = TouchInput.y - this.y;
  540.         var sin = Math.sin(-this.rotation);
  541.         var cos = Math.cos(-this.rotation);
  542.         var rx = this.x + Math.floor(dx * cos + dy * -sin);
  543.         var ry = this.y + Math.floor(dx * sin + dy * cos);
  544.         return (rx >= this.minX() && rx <= this.maxX() &&
  545.                 ry >= this.minY() && ry <= this.maxY());
  546.     };

  547.     Sprite_Picture.prototype.isTouchable = function() {
  548.         return this.bitmap != null && this.visible && this.scale.x !== 0 && this.scale.y !== 0;
  549.     };

  550.     Sprite_Picture.prototype.isTriggered = function() {
  551.         return this.isTouchEvent(TouchInput.isTriggered);
  552.     };

  553.     Sprite_Picture.prototype.isCancelled = function() {
  554.         return this.isTouchEvent(TouchInput.isCancelled);
  555.     };

  556.     Sprite_Picture.prototype.isLongPressed = function() {
  557.         return this.isTouchEvent(TouchInput.isLongPressed);
  558.     };

  559.     Sprite_Picture.prototype.isPressed = function() {
  560.         return this.isTouchEvent(TouchInput.isPressed);
  561.     };

  562.     Sprite_Picture.prototype.isReleased = function() {
  563.         return this.isTouchEvent(TouchInput.isReleased);
  564.     };

  565.     Sprite_Picture.prototype.isRepeated = function() {
  566.         return this.isTouchEvent(TouchInput.isRepeated);
  567.     };

  568.     Sprite_Picture.prototype.isOnFocus = function() {
  569.         return this._onMouse;
  570.     };

  571.     Sprite_Picture.prototype.isOutFocus = function() {
  572.         return this._outMouse;
  573.     };

  574.     Sprite_Picture.prototype.isMoved = function() {
  575.         return this.isTouchEvent(TouchInput.isMoved);
  576.     };

  577.     Sprite_Picture.prototype.isWheelTriggered = function() {
  578.         return this.isTouchEvent(TouchInput.isWheelTriggered);
  579.     };

  580.     Sprite_Picture.prototype.isDoubleTriggered = function() {
  581.         return this.isTouchEvent(TouchInput.isDoubleTriggered);
  582.     };

  583.     Sprite_Picture.prototype.isTouchEvent = function(triggerFunc) {
  584.         return this.isTouchable() && triggerFunc.call(TouchInput) && this.isTouchPosInRect();
  585.     };

  586.     //=============================================================================
  587.     // TouchInput
  588.     //  ホイールクリック、ダブルクリック等を実装
  589.     //=============================================================================
  590.     TouchInput.keyDoubleClickInterval = 300;
  591.     TouchInput._pressStartX = -1;
  592.     TouchInput._pressStartY = -1;
  593.     TouchInput._pressedDistance = 0;
  594.     TouchInput._prevX = -1;
  595.     TouchInput._prevY = -1;

  596.     TouchInput.getPressStartPos = function() {
  597.         return new Position(this._pressStartX, this._pressStartY);
  598.     };

  599.     Object.defineProperty(TouchInput, 'pressedDistance', {
  600.         get: function() {
  601.             return this._pressedDistance;
  602.         },
  603.         configurable: true
  604.     });

  605.     TouchInput._onMouseMove = function(event) {
  606.         var x = Graphics.pageToCanvasX(event.pageX);
  607.         var y = Graphics.pageToCanvasY(event.pageY);
  608.         this._onMove(x, y);
  609.     };

  610.     var _TouchInput_clear = TouchInput.clear;
  611.     TouchInput.clear = function() {
  612.         _TouchInput_clear.apply(this, arguments);
  613.         this._events.wheelTriggered = false;
  614.         this._events.doubleTriggered = false;
  615.     };

  616.     var _TouchInput_update = TouchInput.update;
  617.     TouchInput.update = function() {
  618.         _TouchInput_update.apply(this, arguments);
  619.         this._wheelTriggered = this._events.wheelTriggered;
  620.         this._doubleTriggered = this._events.doubleTriggered;
  621.         this._events.wheelTriggered = false;
  622.         this._events.doubleTriggered = false;
  623.     };

  624.     TouchInput.isWheelTriggered = function() {
  625.         return this._wheelTriggered;
  626.     };

  627.     TouchInput.isDoubleTriggered = function() {
  628.         return this._doubleTriggered;
  629.     };

  630.     var _TouchInput_onMiddleButtonDown = TouchInput._onMiddleButtonDown;
  631.     TouchInput._onMiddleButtonDown = function(event) {
  632.         _TouchInput_onMiddleButtonDown.apply(this, arguments);
  633.         var x = Graphics.pageToCanvasX(event.pageX);
  634.         var y = Graphics.pageToCanvasY(event.pageY);
  635.         if (Graphics.isInsideCanvas(x, y)) {
  636.             this._onWheelTrigger(x, y);
  637.         }
  638.     };

  639.     TouchInput._onWheelTrigger = function(x, y) {
  640.         this._events.wheelTriggered = true;
  641.         this._x = x;
  642.         this._y = y;
  643.     };

  644.     var _TouchInput_onTrigger = TouchInput._onTrigger;
  645.     TouchInput._onTrigger = function(x, y) {
  646.         if (this._date && Date.now() - this._date < this.keyDoubleClickInterval)
  647.             this._events.doubleTriggered = true;
  648.         this._pressStartX = x;
  649.         this._pressStartY = y;
  650.         this._pressedDistance = 0;
  651.         this._prevX = x;
  652.         this._prevY = y;
  653.         _TouchInput_onTrigger.apply(this, arguments);
  654.     };

  655.     var _TouchInput_onMove = TouchInput._onMove;
  656.     TouchInput._onMove = function(x, y) {
  657.         if (this.isPressed()) this._pressedDistance = Math.abs(this._prevX - x) + Math.abs(this._prevY - y);
  658.         this._prevX = x;
  659.         this._prevY = y;
  660.         _TouchInput_onMove.apply(this, arguments);
  661.     };

  662.     var _TouchInput_onRelease = TouchInput._onRelease;
  663.     TouchInput._onRelease = function(x, y) {
  664.         this._pressStartX = 0;
  665.         this._pressStartY = 0;
  666.         this._pressedDistance = 0;
  667.         this._prevX = x;
  668.         this._prevY = y;
  669.         _TouchInput_onRelease.apply(this, arguments);
  670.     };
  671. })();
复制代码

点评

找不到链接了 大神给个?  发表于 2016-3-8 12:23
1.3.2更新了啥?  发表于 2016-3-8 12:20
這個己更訢到1.3.2  发表于 2016-3-8 12:20
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-12-24 01:12

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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