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

Project1

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

[有事请教] 如何让图片始终指向鼠标位置的问题

[复制链接]

Lv2.观梦者

梦石
0
星屑
404
在线时间
45 小时
注册时间
2012-7-16
帖子
41
跳转到指定楼层
1
发表于 2019-12-25 14:04:40 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式

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

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

x
我想做一个ARPG小游戏,在玩家身上有一张指针的图片始终指向鼠标的方向,但是这个问题困扰了我很久,用了Drill_up大佬翻译与制作的插件,我知道可以让图片一直跟随在玩家身上,也知道了使用脚本可以让图片旋转到某个角度,
但是实在想不出如何获得鼠标位置xy,并让图片的旋转角度和鼠标xy相关联,所以想求助一下大家,看看有什么办法、、

评分

参与人数 1+1 收起 理由
白嫩白嫩的 + 1 塞糖

查看全部评分

Lv3.寻梦者

梦石
0
星屑
3834
在线时间
1181 小时
注册时间
2016-8-9
帖子
2399

开拓者

26
发表于 2020-1-5 23:26:48 | 只看该作者
yanzhllwc 发表于 2020-1-1 21:46
现在是这样的状态,我只能用事件来做,代码不会用,其实是8方向的箭头,由于那个像素必须要玩家X和鼠标X或Y ...

顺便问下楼主怎么实现例图中角色只有左右没有上下动作图的?

点评

哦哦 这样也可以 哈哈 期待你的试玩版早点出来  发表于 2020-1-7 03:31
也不能禁用呢,因为我想的是进到屋子里就有上下了,只有战斗的时候会没有上下,嘛,我是觉得问题不大吧,哈哈哈  发表于 2020-1-6 18:13
哈哈,要不研究下我之前楼层里面的根据鼠标决定朝向那个插件吧  发表于 2020-1-6 12:57
没错、、、确实会这样、、、不过我无视了、、、、、哈哈哈  发表于 2020-1-6 00:26
那总会有一个方向是错误的啊,比如上用的左,如果角色当前朝右方,只按上的话突然转方向了。。。  发表于 2020-1-6 00:18
酸酸甜甜就④哇噢
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
404
在线时间
45 小时
注册时间
2012-7-16
帖子
41
25
 楼主| 发表于 2020-1-5 22:45:59 | 只看该作者
虽然研究了很久,但实际却很简单,我不会JS,所以做不成插件,我用的是事件。
方法就是像上面说的一样,先定义4个变量,分别是鼠标的XY和玩家的XY坐标。之后就用脚本,需要旋转的图片角度=那个公式。
$gameScreen.picture(5)._angle = Math.atan2($gameVariables.value(38) - $gameVariables.value(40), $gameVariables.value(37) - $gameVariables.value(39)) * (180 / Math.PI)+90;

QQ图片20200105222203.png (35.29 KB, 下载次数: 27)

QQ图片20200105222203.png

点评

再次谢谢大大了!  发表于 2020-1-5 23:33
哇,真是众人拾柴火焰高啊,辛苦楼主了,感谢楼主在获得成果后分享大家心得,赞赞赞!!!  发表于 2020-1-5 23:20

评分

参与人数 1+1 收起 理由
白嫩白嫩的 + 1 赞赞赞!!!!

查看全部评分

回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
404
在线时间
45 小时
注册时间
2012-7-16
帖子
41
24
 楼主| 发表于 2020-1-5 20:38:19 | 只看该作者
本帖最后由 yanzhllwc 于 2020-1-5 20:59 编辑

没想到做出来了,真的很感谢大家的帮助!!
使用了月光大大提到的Math.atan2公式,因为写在JS里我做不出来,最后尝试在公共事件中制作,把JS的这个公式写在事件中的脚本中,结果就实现了,效果如下
这里给出公式:Math.atan2(y2-y1,x2-x1)*180/Math.PI+90,这里+90度是因为,不知道为啥MV里出来的效果就是差着这个90度,所以加上就正常了。
参考贴子:https://blog.csdn.net/pecke/article/details/41014069

测试1.gif (650.56 KB, 下载次数: 31)

测试1.gif

点评

666666 ~ 這個會變成插件分享嗎?  发表于 2020-1-5 21:35
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
404
在线时间
45 小时
注册时间
2012-7-16
帖子
41
23
 楼主| 发表于 2020-1-1 21:46:03 | 只看该作者
现在是这样的状态,我只能用事件来做,代码不会用,其实是8方向的箭头,由于那个像素必须要玩家X和鼠标X或Y绝对一致才会出现90,180那几个角度,所以可以忽略不计。。。
但是这样只能有这么几个方向,不能一直指向鼠标,如果不行我就只能先放弃这个功能了,先做别的

测试.gif (1.52 MB, 下载次数: 24)

现在的状态

现在的状态

点评

谢谢大大鼓励~ ૮(ꈔꈊꈔ)ა55555555555  发表于 2020-1-3 00:56
看起來已經很棒了  发表于 2020-1-2 09:04
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
404
在线时间
45 小时
注册时间
2012-7-16
帖子
41
22
 楼主| 发表于 2020-1-1 21:21:07 | 只看该作者
在野月光族 发表于 2019-12-31 01:38
瞎猜一下,可能是长这样子的。

月光大大,其实我自己发的18楼那个代码就是全部了,并没有上下文、、、不知道是哪里错了,大大提到的rotation值,请问是什么呢?

点评

emmm、、其实不是很懂,不过感觉就进一步了,非常感谢大大  发表于 2020-1-1 23:04
你代码中的$gamePlayer._realX提取的是格子坐标,要跟鼠标坐标进行比较的话,还需先乘以48像素  发表于 2020-1-1 22:39
看了下gameScreen原来内置了自动更新弧度。那么你代码写到gameScreen的update里应该就可以动起来了。  发表于 2020-1-1 22:38
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
404
在线时间
45 小时
注册时间
2012-7-16
帖子
41
21
 楼主| 发表于 2020-1-1 21:13:14 | 只看该作者
哇~谢谢各位大大了!容我研究一下下!!
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
7504
在线时间
1477 小时
注册时间
2018-12-16
帖子
2064
20
发表于 2019-12-31 17:05:22 | 只看该作者
下面這個官方插件 可以做到 月光大的功能
不過 他只可以 4個方向轉而已
就是無法像 下面這兩個一樣 可以 全方向.... 而且跟很多插件衝突....

01.本來找到GLV的MV Map Projectiles,但是相當難設定..
https://galvs-scripts.com/2016/09/13/mv-map-projectiles/

02. 日本人做的這個 看起來很厲害...不過也是很難設定
https://tm.lucky-duet.com/viewtopic.php?t=7121
https://game.nicovideo.jp/atsumaru/games/gm9334

-----------------------------------
//=============================================================================
// PlayerPointerTurn.js
// ----------------------------------------------------------------------------
// Copyright (c) 2015 Triacontane
// This software is released under the MIT License.
// http://opensource.org/licenses/mit-license.php
// ----------------------------------------------------------------------------
// Version
// 1.1.0 2018/02/10 PD_8DirDash.js?券€????游????孵??怠紋敹????賬?餈賢??????
// 1.0.0 2016/02/23 ??
// ----------------------------------------------------------------------------
// [Blog]   : https://triacontane.blogspot.jp/
// [Twitter]: https://twitter.com/triacontane/
// [GitHub] : https://github.com/triacontane/
//=============================================================================

/*:
* @plugindesc ??喋餈質楚??啜??
* @author ??U?喋??
*
* @help 蝘餃??航?芸???扎?潦?
* ??嫘??扎?踴?嫘????整???
*
* ???啜?喋?胯??押?扎?喋??喋??胯??????
*
* ?拍閬?嚗?
*  雿€?⊥?扳憭€?????賬??典耦?????8蝳?函?嚗?
*  ?怒??????整??€?
*  ???啜?喋??????扼???
*/
(function() {

    var isExistPlugin = function(pluginName) {
        return PluginManager._parameters.hasOwnProperty([pluginName.toLowerCase()]);
    };

    //=============================================================================
    // Game_Player
    //  ??喋?格????
    //=============================================================================
    var _Game_Player_moveByInput      = Game_Player.prototype.moveByInput;
    Game_Player.prototype.moveByInput = function() {
        if (!this.isMoving() && this.canMove() && TouchInput.isMoved()) {
            this.turnToPointer();
        }
        _Game_Player_moveByInput.apply(this, arguments);
    };

    Game_Player._8dirTable = [6, 9, 8, 7, 4, 1, 2, 3, 6];
    Game_Player.prototype.turnToPointer = function() {
        var tx = TouchInput.x, ty = TouchInput.y, sx = this.screenX(), sy = this.screenY();
        var dir;
        if (isExistPlugin('PD_8DirDash') && this._characterName.indexOf('Q') !== -1) {
            var degree = (Math.atan2(ty - sy, -(tx - sx)) / Math.PI + 1) / 2 * 8;
            dir        = Game_Player._8dirTable[Math.round(degree)];
        } else {
            dir = Math.abs(tx - sx) > Math.abs(ty - sy) ? (tx > sx ? 6 : 4) : (ty > sy ? 2 : 8);
        }
        this.setDirection(dir);
    };

    //=============================================================================
    // TouchInput
    //  ??喋?桐?蝵柴?撣詻閮
    //=============================================================================
    TouchInput._onMouseMove = function(event) {
        var x = Graphics.pageToCanvasX(event.pageX);
        var y = Graphics.pageToCanvasY(event.pageY);
        this._onMove(x, y);
    };
})();

点评

谢谢大大帮忙寻找插件!!  发表于 2020-1-1 21:48
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
3053
在线时间
318 小时
注册时间
2015-4-30
帖子
92
19
发表于 2019-12-31 01:38:12 | 只看该作者
瞎猜一下,可能是长这样子的。

点评

感谢月光大佬解惑,容我等在研究研究,哈哈  发表于 2019-12-31 23:15
MV内置的是A-Start寻路算法,这算法更适合落点到大格子,也就是4方向、8方向这样。如果像楼下说的像素点移动,感觉MV很吃力了。  发表于 2019-12-31 21:10
至于角度的计算,简书上有关于Math.atan2的算法介绍,这里就不赘述了。箭头原地转感觉还是可以实现的,不过让人物跟随箭头走还得依赖寻路吧。  发表于 2019-12-31 21:07
楼主的方法由于没有给出上下文,所以不好评论。不过看代码写到了角度但没赋值弧度rotation的值,第一眼的感觉就是游戏画面应该会没反应。  发表于 2019-12-31 21:02
上图只是将事件显示名称改成显示箭头,毕竟MV有内置的方向计算方法,调用一下而已。不过如果要改成楼下那样的像素点移动,估计得重写寻路  发表于 2019-12-31 21:00

评分

参与人数 1+1 收起 理由
白嫩白嫩的 + 1 精品文章

查看全部评分

回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
404
在线时间
45 小时
注册时间
2012-7-16
帖子
41
18
 楼主| 发表于 2019-12-29 02:49:37 | 只看该作者
本帖最后由 yanzhllwc 于 2019-12-29 02:59 编辑

由于不会程序,所以尝试了很多写法,总之是不成功,最后决定把里面的内容简单化,写成了下面的样子:

(function () {
       
        var _TouchInput__onMouseMove = TouchInput._onMouseMove;
    TouchInput._onMouseMove = function(event) {
        _TouchInput__onMouseMove.apply(this, arguments);
        this.mouseX = Graphics.pageToCanvasX(event.pageX);
        this.mouseY = Graphics.pageToCanvasY(event.pageY);
    };
       
        var px = $gamePlayer._realX;
        var py = $gamePlayer._realY;
        var mx = TouchInput.mouseX;
        var my = TouchInput.mouseY;
        var targetShuttle = 0;
       
        if(px <= mx) {
                if (py >= my) {
                        targetShuttle = 45;
                } else {
                        targetShuttle = 135;
                }
        } else {
                if (py >= my) {
                        targetShuttle = 315;
                } else {
                        targetShuttle = 225;
                }
        };
       
        $gameScreen.picture(5)._angle = targetShuttle;
       
})();

存了一个js放在了插件目录并在游戏中开启,自我感觉是先定义了鼠标的移动时XY坐标,之后用px,py,mx,my分别代表玩家XY坐标和鼠标XY坐标,引用 芯☆淡茹水 大佬的区域判断,让那个5号图片的角度值呈现45,135,225,315的变化,可是这样都不成功,那张图片完全没有变化、、不知道有没有大佬能帮我看看是什么小白问题导致了不成功、、、、、

点评

喽主加油! 好期待你成功的那一天~  发表于 2019-12-29 10:33

评分

参与人数 1+1 收起 理由
白嫩白嫩的 + 1 加油,期待楼主早点成功!!!.

查看全部评分

回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2025-1-12 08:55

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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