- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我在尝试创建一个用鼠标移动对象的脚本时遇到了问题。当我按住鼠标按钮时,对象应该移动(哪个按钮并不重要,所以让我们把它留在那里。我使用 SDL,所以我可以毫不费力地实现它)。我当然可以有一个变量 moving = true
当我开始移动然后更新位置直到 moving = false
,但这似乎可能很困惑。我想要的是能够调用函数 grab_piece
然后让棋子跟随鼠标,直到我调用释放函数(我正在创建一个国际象棋游戏,棋子从哪里来)。
到目前为止的想法和相关代码: 这个想法是为鼠标的 x 和 y 位置分配一个指针,这当然会与鼠标同时移动棋子。然而,这似乎很乏味,因为围绕指针移动似乎很容易出错。有可能以安全的方式做到这一点吗?否则我愿意接受其他建议。
示例代码
SDL_Event e; //Event queue more or less
while (!quit) //Main loop, a little simplified
while (SDL_PollEvent( &e ) != 0){
if (e.type == SDL_QUIT){
quit = true;
}
if(e.type == SDL_MOUSEMOTION){
SDL_GetMouseState(&mouseX, &mouseY);
//do irrelevant things
} else if (e.type == SDL_MOUSEBUTTONDOWN){
//get mouse position
SDL_GetMouseState(&mouseX, &mouseY);
//get the board position
mouseBinPos = misc::screen2idx(mouseX, mouseY);
//location in the piece vector (hard coded)
currentPieceIdx = chess_board.getMappedPiece(mouseBinPos);
if (currentPieceIdx>=0){
chess_board.getPiece(currentPieceIdx)->grab_piece(mouseX, mouseY);
}
} else if ((e.type == SDL_MOUSEBUTTONUP)) {
//will release the piece and snap to nearest bin. Not implemented yet.
snap2bin(in args);
}
}
}
void Piece::grab_piece(int mouseX, int mouseY){
//Set pixel positions
setPixX(mouseX);
setPixY(mouseY);
}
所有变量都是整数,除了事件队列、棋盘和棋子是一个结构、用户定义类和用户定义类。
这其实更像是一个设计问题,所以我不需要可执行代码。关于如何进行设计的更多提示,如果我应该分配 pixX
和 pixY
应该是指向 mouseX
的指针和 mouseY
等等。
如果有人有想法,我会很高兴。我已尝试尽可能详细地描述问题,但如果您有任何问题,请发表评论。如果有的话,我会描述进一步的尝试,但我真的不知道从哪里开始。另外,这不是工作,也不是学校,我已经考虑了好几天了,但没有找到一个好的方法。所以我不只是想轻易离开。
最佳答案
您关于指针的想法似乎不明确,并且可能将您引向一条无用的道路。
移动棋子时,您需要像往常一样使用相同的事件循环。这意味着 MOUSEMOTION 有时必须调整棋子的位置,有时则不需要。这意味着您需要以某种方式跟踪“移动一 block ”状态。
这是基本配方:在按下按钮时,保存你点击的片段的 idx,可能在一个名为“piece_being_dragged”的变量中,或者其他什么。您还需要保存鼠标指针到对象中心的偏移量,这样对象就不会在指针上重新居中。当你到达那里时你会明白我的意思。
按下按钮时,将拖动状态变量归零,并处理“完成移动”逻辑。
在 mousemotion 上,当 piece_being_dragged 不为零时,从索引向上查找 piece,并根据鼠标指针和先前保存的中心偏移设置新位置。
这一切是不是有点乱?是的。有必要吗?是的。
关于c++ - 如何在 C++ 中用鼠标移动对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28370894/
我的一位教授给了我们一些考试练习题,其中一个问题类似于下面(伪代码): a.setColor(blue); b.setColor(red); a = b; b.setColor(purple); b
我似乎经常使用这个测试 if( object && object !== "null" && object !== "undefined" ){ doSomething(); } 在对象上,我
C# Object/object 是值类型还是引用类型? 我检查过它们可以保留引用,但是这个引用不能用于更改对象。 using System; class MyClass { public s
我在通过 AJAX 发送 json 时遇到问题。 var data = [{"name": "Will", "surname": "Smith", "age": "40"},{"name": "Wil
当我尝试访问我的 View 中的对象 {{result}} 时(我从 Express js 服务器发送该对象),它只显示 [object][object]有谁知道如何获取 JSON 格式的值吗? 这是
我有不同类型的数据(可能是字符串、整数......)。这是一个简单的例子: public static void main(String[] args) { before("one"); }
嗨,我是 json 和 javascript 的新手。 我在这个网站找到了使用json数据作为表格的方法。 我很好奇为什么当我尝试使用 json 数据作为表时,我得到 [Object,Object]
已关闭。此问题需要 debugging details 。目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and the
我听别人说 null == object 比 object == null check 例如: void m1(Object obj ) { if(null == obj) // Is thi
Match 对象 提供了对正则表达式匹配的只读属性的访问。 说明 Match 对象只能通过 RegExp 对象的 Execute 方法来创建,该方法实际上返回了 Match 对象的集合。所有的
Class 对象 使用 Class 语句创建的对象。提供了对类的各种事件的访问。 说明 不允许显式地将一个变量声明为 Class 类型。在 VBScript 的上下文中,“类对象”一词指的是用
Folder 对象 提供对文件夹所有属性的访问。 说明 以下代码举例说明如何获得 Folder 对象并查看它的属性: Function ShowDateCreated(f
File 对象 提供对文件的所有属性的访问。 说明 以下代码举例说明如何获得一个 File 对象并查看它的属性: Function ShowDateCreated(fil
Drive 对象 提供对磁盘驱动器或网络共享的属性的访问。 说明 以下代码举例说明如何使用 Drive 对象访问驱动器的属性: Function ShowFreeSpac
FileSystemObject 对象 提供对计算机文件系统的访问。 说明 以下代码举例说明如何使用 FileSystemObject 对象返回一个 TextStream 对象,此对象可以被读
我是 javascript OOP 的新手,我认为这是一个相对基本的问题,但我无法通过搜索网络找到任何帮助。我是否遗漏了什么,或者我只是以错误的方式解决了这个问题? 这是我的示例代码: functio
我可以很容易地创造出很多不同的对象。例如像这样: var myObject = { myFunction: function () { return ""; } };
function Person(fname, lname) { this.fname = fname, this.lname = lname, this.getName = function()
任何人都可以向我解释为什么下面的代码给出 (object, Object) 吗? (console.log(dope) 给出了它应该的内容,但在 JSON.stringify 和 JSON.parse
我正在尝试完成散点图 exercise来自免费代码营。然而,我现在只自己学习了 d3 几个小时,在遵循 lynda.com 的教程后,我一直在尝试确定如何在工具提示中显示特定数据。 This code
我是一名优秀的程序员,十分优秀!