Project1

标题: 鼠标系统beta1(多脚本原创+整合) [打印本页]

作者: 未知的赞歌    时间: 2008-5-24 21:23
标题: 鼠标系统beta1(多脚本原创+整合)
为ARPG设计的UI,目前没有心思弄了,发上来给大家看看
完全抛弃了Window_Selectable类,另外新建了Window_Clip类作为选择窗口的超级类。具体请查看工程脚本。
工程比较卡,主要是帮助窗口的刷新问题,哪位大哥帮忙改改吧
不多说了,放几张图先


开始画面


鼠标移到按钮上时的效果


特技面板


右键点击可以移动图标


物品+装备面板


商店场景


用鼠标滚轮调整数量


Tab键Show出小地图

范例工程下载:http://rpg.blue/upload_program/f ... �beta1_92063120.rar


作者: RXVincent    时间: 2008-5-24 21:28
好酷,看看先{/dy}
作者: 越前リョーマ    时间: 2008-5-24 21:38
很棒!{/qiang}

但是可以改成不同情况下不同鼠标样式吗?那样好看些。
PS。比如一般用一个,攻击一个,魔法(技能)一个,等……
作者: 禾西    时间: 2008-5-24 21:41
没有注釋...没有注釋...没有注釋...没有注釋...没有注釋...没有注釋...

囧rz ||| 看不明白...
大致上從字眼上面看來是用鼠標點擊取點的方法實現。(所有鼠標系統都是這樣咩)
內核是夏娜的鼠標系統,
與wh甚麼b(名字太難記)的尋路系統。<----press尋路還是實現不了,殘念|||
窗口的手感不錯,就是系統用起來不太靈活...
作者: 030428    时间: 2008-5-24 21:42
提示: 作者被禁止或删除 内容自动屏蔽
作者: 未知的赞歌    时间: 2008-5-24 21:44
以下引用越前リョーマ于2008-5-24 13:38:11的发言:
但是可以改成不同情况下不同鼠标样式吗?那样好看些。
PS。比如一般用一个,攻击一个,魔法(技能)一个,等……

呃,这要等帮助窗口的刷新问题搞定后再说了,嗯,具体应该可以仿照站上的四(八)方向鼠标系统的做法吧
作者: 越前リョーマ    时间: 2008-5-24 21:45
以下引用禾西于2008-5-24 13:41:14的发言:

没有注釋...没有注釋...没有注釋...没有注釋...没有注釋...没有注釋...

囧rz ||| 看不明白...
大致上從字眼上面看來是用鼠標點擊取點的方法實現。(所有鼠標系統都是這樣咩)
內核是夏娜的鼠標系統,
與wh甚麼b(名字太難記)的尋路系統。<----press尋路還是實現不了,殘念|||
窗口的手感不錯,就是系統用起來不太靈活...

话说禾西也在做鼠标系统那个……
作者: 禾西    时间: 2008-5-24 21:48
卡死在尋路系統...。休息一段時間看看有沒有突破|||
作者: 越前リョーマ    时间: 2008-5-24 21:49
我最希望的就是鼠标系统不要卡……
作者: IamI    时间: 2008-5-24 21:50
兼容性不知怎么样……不过手感……呵呵。
作者: QQ幻術師    时间: 2008-5-24 21:53
提示: 作者被禁止或删除 内容自动屏蔽
作者: 未知的赞歌    时间: 2008-5-24 21:55
以下引用禾西于2008-5-24 13:48:33的发言:

卡死在尋路系統...。休息一段時間看看有沒有突破|||

寻路系统确实有BUG,汗……
不过卡的原因还有一个在于……
除了商店的Panel以外,其他的Panel都是直接在地图上刷新的
查看Panel的时候人物依然可以行走的说……
作者: 越前リョーマ    时间: 2008-5-24 22:09
我在想的是到现在我们也没有一个好点的VX鼠标……

XP倒是有好几套了……
作者: 禾西    时间: 2008-5-24 22:09
Panel 的判斷是通過甚麽方法實現的?可以稍微說一下嗎?
是不是 用 for 循環 檢查範圍數組?
禾西睏覺,沒有細看...
作者: 未知的赞歌    时间: 2008-5-24 22:35
以下引用禾西于2008-5-24 14:09:44的发言:

Panel 的判斷是通過甚麽方法實現的?可以稍微說一下嗎?
是不是 用 for 循環 檢查範圍數組?
禾西睏覺,沒有細看...

主要是在Window_Clip的update里检查鼠标位置,用for循环……
MS这个也是拖慢工程的原因
作者: IamI    时间: 2008-5-24 22:35
以下引用禾西于2008-5-24 14:09:44的发言:

Panel 的判斷是通過甚麽方法實現的?可以稍微說一下嗎?
是不是 用 for 循環 檢查範圍數組?
禾西睏覺,沒有細看...

理解不能。搜索就出了这么些东西
def on_panel
   return false if !$scene.is_a?(Scene_Map)
   return false if ($scene.panel_left == nil && $scene.panel_right == nil)
   mx,my = Mouse.pos
   if $scene.panel_left != nil
     if mx >= $scene.panel_left.x && mx <= $scene.panel_left.x + $scene.panel_left.width &&
       my >= $scene.panel_left.y && my <= $scene.panel_left.y + $scene.panel_left.height
       return true
     end
   end
   if $scene.panel_right != nil
     if mx >= $scene.panel_right.x && mx <= $scene.panel_right.x + $scene.panel_right.width &&
       my >= $scene.panel_right.y && my <= $scene.panel_right.y + $scene.panel_right.height
       return true
     end
   end
   return false
end

实际上就是禾西你上次的那个脚本,但是那个搭构了数组,而这个就是判断这个点在x和x+width之间并且在y和y+height之间而已。
附上:作者学C++的吧?
作者: 禾西    时间: 2008-5-24 22:58
果然是一樣的|||
用 .each 語法可以比 for 快少少少少...一點

另外卡的原因好像不是循環的問題,具體你可以找「窗口自留數據」的教學看一下,還有水迭澜對於某個幫助窗口的優化方法。

但是移動手感眞的...(望天|||)
作者: link006007    时间: 2008-5-25 00:13
卡....

作者: yangff2    时间: 2008-5-25 06:04
提示: 作者被禁止或删除 内容自动屏蔽
作者: link006007    时间: 2008-5-25 09:30
以下引用yangff2于2008-5-24 22:04:28的发言:

本来想用vb写个dll但是,居然无法调用?!!!!!
我囧了

或许是你的Dll导出格式有问题
我没有记错的话  VS做出的 为了保持函数兼容性,函数都是__stdcall(C\C++中是这么叫的),
__stdcall这样的函数调用方式, 在编译时会产生别名, 命名依编译器而定,
所以在Win32API.new的函数中,使用原函数名肯定调用不到
当然了. 上面是我用C\C++时遇到的  VB没用过{/hx}
作者: 沉影不器    时间: 2008-5-26 03:17
提示: 作者被禁止或删除 内容自动屏蔽
作者: Edmiss    时间: 2008-5-26 03:46
太强了= =
作者: yangff    时间: 2008-5-26 05:10
以下引用沉影不器于2008-5-25 19:17:01的发言:

能不能具体说明一下相比原鼠标脚本哪方面的做了改进...


以下引用yangff2于2008-5-24 22:04:28的发言:

本来想用vb写个dll但是,居然无法调用?!!!!!
我囧了


vb写个dll...
vb输出函数似乎有点困难,不晓得您怎么输出的...

用命令行生成,打开输出开关.
后来用C++写了一个,结果无法编译,不知道是程序问题还是编译器问题
作者: yangff    时间: 2008-5-26 05:12
// Mouse Dynamic Link Library.cpp : Defines the entry point for the DLL application.
#include "stdafx.h"
#include <"stdio.h">
#include <"windows.h">
// API
[DllImport("user32.dll")]
public static extern short GetKeyState(int nVirtKey);
public const int VK_LBUTTON = 1;
public const int VK_RBUTTON = 2;

int x,y;
long l;
long hd;
long KeyTepy;
bool Mouse_Open;
// API
CPoint point;
BOOL APIENTRY DllMain( HANDLE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
                                         )
{
    return TRUE;
}

extern long start(long hWnd)
{
        Mouse_Open = true;
        hd = hWnd;
}

extern long __stdcall Get_Tepy()
{
        return KeyTepy;
}

extern long __stdcall Get_Pos_X()
{
return x;
}

extern long __stdcall Get_Pos_Y()
{
return x;
}

extern long __stdcall Mouse_Close()
{
        Mouse_Open = false;
}

extern int Updata_Mouse()
{
        KeyTepy = 0;
        GetCursorPos(&point);
        ScreenToClient(hd,&print);
        x   =   point.x;
    y   =   point.y;
        if (GetKeyState(VK_LBUTTON) & 0x80) == 0x80
        {
                KeyTepy = 1;
        };       
        if (GetKeyState(VK_RBUTTON) & 0x80) == 0x80
        {
                KeyTepy = 2;
        };
    if (((GetKeyState(VK_LBUTTON) & 0x80) == 0x80) &&
       ((GetKeyState(VK_RBUTTON) & 0x80) == 0x80))
        {
        KeyTepy = 3;
        };

}

作者: yangff    时间: 2008-5-26 05:13
以下引用link006007于2008-5-25 1:30:28的发言:


以下引用yangff2于2008-5-24 22:04:28的发言:

本来想用vb写个dll但是,居然无法调用?!!!!!
我囧了


或许是你的Dll导出格式有问题
我没有记错的话  VS做出的 为了保持函数兼容性,函数都是__stdcall(C\C++中是这么叫的),
__stdcall这样的函数调用方式, 在编译时会产生别名, 命名依编译器而定,
所以在Win32API.new的函数中,使用原函数名肯定调用不到
当然了. 上面是我用C\C++时遇到的  VB没用过

是变量的问题,ms vb的变量体系和ruby不同
作者: Jeyitaly    时间: 2008-5-27 01:32
很好很强大!!
作者: 死武王    时间: 2008-5-27 20:31
提示: 作者被禁止或删除 内容自动屏蔽
作者: 龙腾天下    时间: 2008-5-27 20:51
这个游戏有点儿像传奇一样,很好!
作者: yangff    时间: 2008-5-27 20:58
以下引用越前リョーマ于2008-5-24 13:49:36的发言:

我最希望的就是鼠标系统不要卡……

夏娜的dll鼠标就不卡阿
作者: hitlerson    时间: 2008-5-28 20:51
看了楼主的这个系统介绍,mouse都用上DLL了,觉得我的那个还是很稚嫩啊,惭愧昨天也发出来了!还请大家批评
加油了!!!
作者: bububinghe    时间: 2008-5-29 04:31
画面不错的说!
作者: Thomas    时间: 2008-5-29 14:09
提示: 作者被禁止或删除 内容自动屏蔽
作者: 天邪    时间: 2008-11-29 08:30
提示: 作者被禁止或删除 内容自动屏蔽




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1