本节我们将要增加鼠标点击功能
第一步:绑定窗口
setMouseCallback("PopStarGame", OnMouse, 0);
我们将鼠标回调函数绑定到游戏窗口上
第二步:输出鼠标在游戏窗口中的位置信息
需要注意的是,窗口横轴为X轴,竖轴为Y轴,坐标是(x, y),而矩阵坐标是按照(row, col),故窗口中的点(x, y)对应的值在矩阵中为(y, x)
void OnMouse(int event, int x, int y, int flags, void* p) {
printf("location x:%d y:%d\n", x, y);
}
第三步:我们需要判断是否是鼠标左键点击,然后获取点击时的坐标
enum
{
CV_EVENT_MOUSEMOVE = 0,//移动
CV_EVENT_LBUTTONDOWN = 1,//左键按下
CV_EVENT_RBUTTONDOWN = 2,//右键按下
CV_EVENT_MBUTTONDOWN = 3,//中键按下
CV_EVENT_LBUTTONUP = 4,//左键弹起
CV_EVENT_RBUTTONUP = 5,//右键弹起
CV_EVENT_MBUTTONUP = 6,//中键弹起
CV_EVENT_LBUTTONDBLCLK = 7,//左键点击
CV_EVENT_RBUTTONDBLCLK = 8,//右键点击
CV_EVENT_MBUTTONDBLCLK = 9 //中键点击
};
void OnMouse(int event, int x, int y, int flags, void* p) {
if (event == CV_EVENT_LBUTTONDOWN) {//鼠标左键按下
printf("location x:%d y:%d\n", x, y);
}
}
第四步:通过坐标计算点击的是第几行第几列的星星
代码如下:
#include<opencv2/opencv.hpp>
#include<opencv2/core/core.hpp>
#include<opencv2/imgproc/imgproc.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<stdio.h>
using namespace cv;
const int WIDTH = 15;
const int HEIGHT = 20;
int mpt[WIDTH][HEIGHT] = { 0 };
Mat image_background;
Mat image_red;
Mat image_yellow;
Mat image_green;
Mat image_purple;
Mat image_blue;
enum
{
CV_EVENT_MOUSEMOVE = 0,//移动
CV_EVENT_LBUTTONDOWN = 1,//左键按下
CV_EVENT_RBUTTONDOWN = 2,//右键按下
CV_EVENT_MBUTTONDOWN = 3,//中键...
完成本节课的内容
登录后开始许愿
暂无评论,来抢沙发