【3D技术宅公社】XR数字艺术论坛  XR技术讨论 XR互动电影 定格动画

 找回密码
 立即注册

QQ登录

只需一步,快速开始

调查问卷
论坛即将给大家带来全新的技术服务,面向三围图形学、游戏、动画的全新服务论坛升级为UTF8版本后,中文用户名和用户密码中有中文的都无法登陆,请发邮件到324007255(at)QQ.com联系手动修改密码

3D技术论坛将以计算机图形学为核心,面向教育 推出国内的三维教育引擎该项目在持续研发当中,感谢大家的关注。

查看: 1807|回复: 4

新手求教!!关于3DXSpriet出现的问题

[复制链接]
发表于 2009-4-17 23:04:01 | 显示全部楼层 |阅读模式
[BR]最近在先学校的毕业项目第一次做UI的时候遇到一个问题就是在用鼠标拖动精灵窗口的时候坐标会有误差,而且很明显就教各位高手指点一二.代码如下
[BR]我想实现一个游戏里类似背包的东西点击后拖拽到指定位置。
[BR]这是精灵累的一个函数我通过这个函数来用鼠标移动为_RnederPos赋值来实现移动
[BR] 
[BR]void UISprite::setPosition(float x,float y)
[BR]{  _RnederPos.x=x;
[BR]  _RnederPos.y=y;
[BR]  _RnederPos.z=0.0f; 
[BR]}
[BR]这是渲染函数里的相关代码
[BR]_pSprite->Begin(NULL);
[BR] _pSprite->Draw(_pTex->getD3DTexture(),&_Rect,&_Center,&_RnederPos,_Color);
[BR] _pSprite->End();
[BR] 
[BR] 
[BR]这段是控制移动的函数Bottom继承Mouselistener类鼠标移动,在符合条件的时候调用setPosition
[BR]鼠标是经过转换的是屏幕坐标  me为一个自定义结构体里面有鼠标的X Y坐标等
[BR] 
[BR]void Bottom:nMouseMove(const MOUSEEVENT& me)
[BR]{       if(_bIng==true)
[BR]       _pSprite->setPosition(me.x,me.y);
[BR] 
[BR]     if(_pSprite->Isinside(me.x,me.y))
[BR]    {
[BR]         _bIn=true;
[BR]         if(me.flag & MOUSEEVENT::MBM_LEFT)
[BR]        _bIng=true;
[BR] 
[BR]     }
[BR] else 
[BR]       _bIn=false;
[BR]}
[BR] 
[BR]下面的代码是计算鼠标是否在我想点击的位置内
[BR] 
[BR]bool UISprite::Isinside(FLOAT x,FLOAT y)
[BR]{
[BR]       if(x>=_RnederPos.x-_Width&&x<=_RnederPos.x&&          y>=_RnederPos.y-_Height&&y<=_RnederPos.y)
[BR]              return true;       else
[BR]          return false; 
[BR]}
[BR] 
[BR]现在的问题是1当我点击一个小窗口进行拖拽的时候向下拖拽Isinside函数的范围会逐渐的慢慢的向下移动,光标也会慢慢的离小窗口越来越远
[BR]2,1的情况在全屏模式下就不会出现。求教如何在视窗模式下解决这个问题
 楼主| 发表于 2009-4-20 18:15:32 | 显示全部楼层
[BR]谢谢各位
[BR]问题解决最后又写了鼠标
[BR] 
发表于 2009-4-18 22:20:51 | 显示全部楼层

虽然我一直想吐槽很多帖子的Spriet写错了。

 

但我还是建议使用第三方UI。

发表于 2009-4-19 11:01:58 | 显示全部楼层

这个误差是存在的~~

大概是渲染的速度和win32鼠标消息之间传递速度的问吧~~

隐藏掉系统鼠标 自己画一个鼠标看看效果~

发表于 2009-4-21 08:54:29 | 显示全部楼层
到底是什么问题呢??
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|3D数字艺术论坛 ( 沪ICP备14023054号 )

GMT+8, 2025-2-6 12:50

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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