C++ 在SFML事件中发送鼠标位置
我一直在研究正确的语法,以便将mouseX和mouseY位置传递给我的类 我的尝试是这样的:C++ 在SFML事件中发送鼠标位置,c++,sfml,C++,Sfml,我一直在研究正确的语法,以便将mouseX和mouseY位置传递给我的类 我的尝试是这样的: // Start the game loop while (window.isOpen()) { // Process events sf::Event event; while (window.pollEvent(event)) { // Close window : exit if (event.type == sf:
// Start the game loop
while (window.isOpen())
{
// Process events
sf::Event event;
while (window.pollEvent(event))
{
// Close window : exit
if (event.type == sf::Event::Closed) {
window.close();
}
}
// Clear screen
window.clear();
// Draw the sprite
window.draw(sprite);
window.draw(lsprite);
if(btn_quit.IsIn(sf::Event::MouseMoveEvent::x,sf::Event::MouseMoveEvent::y){
btn_quit.RenderImg(window,"button_on.png");
} else {
btn_quit.RenderImg(window,"button.png");
}
///rest of the code not relevant to this issue
// Start the game loop
while (window.isOpen())
{
// Process events
sf::Event event;
while (window.pollEvent(event))
{
// Close window : exit
if (event.type == sf::Event::Closed) {
window.close();
}
else if (event.type == sf::Event::MouseMove)
{
if(btn_quit.IsIn(event.MouseMoveEvent.x, event.MouseMoveEvent.x){
btn_quit.RenderImg(window,"button_on.png");
} else {
btn_quit.RenderImg(window,"button.png");
}
}
}
// Clear screen
window.clear();
// Draw the sprite
window.draw(sprite);
window.draw(lsprite);
if(event.type == sf::Event::MouseMoved)
{
// do something with event.mouseMove.x and event.mouseMove.y
}
这是在我的班上:
bool IsIn( int mouseX, int mouseY )
{
if (((mouseX > m_x) && (mouseX < m_x + m_w))
&& ((mouseY > m_y) && (mouseY < m_y + m_h ) ) ) {
return true;
} else {
return false;
}
}
bool-IsIn(int-mouseX,int-mouseY)
{
如果((mouseX>mux)和&(mouseXm_-y)和&(mouseY
我在输入x和y时一直遇到一个错误,它是这样说的:
错误C2597:非法引用非静态成员'sf::Event::MouseMoveEvent::x'
错误C2597:非法引用非静态成员“sf::Event::MouseMoveEvent::y”
您试图静态访问结构的非静态成员字段。你不能那样做。试着这样做:
// Start the game loop
while (window.isOpen())
{
// Process events
sf::Event event;
while (window.pollEvent(event))
{
// Close window : exit
if (event.type == sf::Event::Closed) {
window.close();
}
}
// Clear screen
window.clear();
// Draw the sprite
window.draw(sprite);
window.draw(lsprite);
if(btn_quit.IsIn(sf::Event::MouseMoveEvent::x,sf::Event::MouseMoveEvent::y){
btn_quit.RenderImg(window,"button_on.png");
} else {
btn_quit.RenderImg(window,"button.png");
}
///rest of the code not relevant to this issue
// Start the game loop
while (window.isOpen())
{
// Process events
sf::Event event;
while (window.pollEvent(event))
{
// Close window : exit
if (event.type == sf::Event::Closed) {
window.close();
}
else if (event.type == sf::Event::MouseMove)
{
if(btn_quit.IsIn(event.MouseMoveEvent.x, event.MouseMoveEvent.x){
btn_quit.RenderImg(window,"button_on.png");
} else {
btn_quit.RenderImg(window,"button.png");
}
}
}
// Clear screen
window.clear();
// Draw the sprite
window.draw(sprite);
window.draw(lsprite);
if(event.type == sf::Event::MouseMoved)
{
// do something with event.mouseMove.x and event.mouseMove.y
}
您正在尝试静态访问结构的非静态成员字段。你不能那样做。试着这样做:
// Start the game loop
while (window.isOpen())
{
// Process events
sf::Event event;
while (window.pollEvent(event))
{
// Close window : exit
if (event.type == sf::Event::Closed) {
window.close();
}
}
// Clear screen
window.clear();
// Draw the sprite
window.draw(sprite);
window.draw(lsprite);
if(btn_quit.IsIn(sf::Event::MouseMoveEvent::x,sf::Event::MouseMoveEvent::y){
btn_quit.RenderImg(window,"button_on.png");
} else {
btn_quit.RenderImg(window,"button.png");
}
///rest of the code not relevant to this issue
// Start the game loop
while (window.isOpen())
{
// Process events
sf::Event event;
while (window.pollEvent(event))
{
// Close window : exit
if (event.type == sf::Event::Closed) {
window.close();
}
else if (event.type == sf::Event::MouseMove)
{
if(btn_quit.IsIn(event.MouseMoveEvent.x, event.MouseMoveEvent.x){
btn_quit.RenderImg(window,"button_on.png");
} else {
btn_quit.RenderImg(window,"button.png");
}
}
}
// Clear screen
window.clear();
// Draw the sprite
window.draw(sprite);
window.draw(lsprite);
if(event.type == sf::Event::MouseMoved)
{
// do something with event.mouseMove.x and event.mouseMove.y
}
你目前所做的有几个方面是不正确的。首先,您不能像那样访问静态数据x和y,因为它根本不存在 其次,SFML事件本质上是联合,这意味着它们的实际内容将取决于您试图处理的事件类型。不能为每个事件获取x和y值,至少不能从事件对象获取。如果您有鼠标事件,您将执行以下操作:
// Start the game loop
while (window.isOpen())
{
// Process events
sf::Event event;
while (window.pollEvent(event))
{
// Close window : exit
if (event.type == sf::Event::Closed) {
window.close();
}
}
// Clear screen
window.clear();
// Draw the sprite
window.draw(sprite);
window.draw(lsprite);
if(btn_quit.IsIn(sf::Event::MouseMoveEvent::x,sf::Event::MouseMoveEvent::y){
btn_quit.RenderImg(window,"button_on.png");
} else {
btn_quit.RenderImg(window,"button.png");
}
///rest of the code not relevant to this issue
// Start the game loop
while (window.isOpen())
{
// Process events
sf::Event event;
while (window.pollEvent(event))
{
// Close window : exit
if (event.type == sf::Event::Closed) {
window.close();
}
else if (event.type == sf::Event::MouseMove)
{
if(btn_quit.IsIn(event.MouseMoveEvent.x, event.MouseMoveEvent.x){
btn_quit.RenderImg(window,"button_on.png");
} else {
btn_quit.RenderImg(window,"button.png");
}
}
}
// Clear screen
window.clear();
// Draw the sprite
window.draw(sprite);
window.draw(lsprite);
if(event.type == sf::Event::MouseMoved)
{
// do something with event.mouseMove.x and event.mouseMove.y
}
或者,如果要在mouseMoved
事件范围之外执行此操作,则始终可以使用该类。这包含一个getPosition
方法,该方法将返回一个包含x
和y
的二维向量:
sf::Mouse::getPosition(); //Absolute coordinates
sf::Mouse::getPosition(window); //Relative to window
你目前所做的有几个方面是不正确的。首先,您不能像那样访问静态数据x和y,因为它根本不存在 其次,SFML事件本质上是联合,这意味着它们的实际内容将取决于您试图处理的事件类型。不能为每个事件获取x和y值,至少不能从事件对象获取。如果您有鼠标事件,您将执行以下操作:
// Start the game loop
while (window.isOpen())
{
// Process events
sf::Event event;
while (window.pollEvent(event))
{
// Close window : exit
if (event.type == sf::Event::Closed) {
window.close();
}
}
// Clear screen
window.clear();
// Draw the sprite
window.draw(sprite);
window.draw(lsprite);
if(btn_quit.IsIn(sf::Event::MouseMoveEvent::x,sf::Event::MouseMoveEvent::y){
btn_quit.RenderImg(window,"button_on.png");
} else {
btn_quit.RenderImg(window,"button.png");
}
///rest of the code not relevant to this issue
// Start the game loop
while (window.isOpen())
{
// Process events
sf::Event event;
while (window.pollEvent(event))
{
// Close window : exit
if (event.type == sf::Event::Closed) {
window.close();
}
else if (event.type == sf::Event::MouseMove)
{
if(btn_quit.IsIn(event.MouseMoveEvent.x, event.MouseMoveEvent.x){
btn_quit.RenderImg(window,"button_on.png");
} else {
btn_quit.RenderImg(window,"button.png");
}
}
}
// Clear screen
window.clear();
// Draw the sprite
window.draw(sprite);
window.draw(lsprite);
if(event.type == sf::Event::MouseMoved)
{
// do something with event.mouseMove.x and event.mouseMove.y
}
或者,如果要在mouseMoved
事件范围之外执行此操作,则始终可以使用该类。这包含一个getPosition
方法,该方法将返回一个包含x
和y
的二维向量:
sf::Mouse::getPosition(); //Absolute coordinates
sf::Mouse::getPosition(window); //Relative to window
嗯。。。就像错误信息所说的那样。您试图像访问静态成员一样访问x和y成员,但显然不是。看起来您应该调用
btn\u quit.IsIn(event.x,event.y)
?嗯。。。就像错误信息所说的那样。您试图像访问静态成员一样访问x和y成员,但它们显然不是。看起来您应该调用btn\u quit.IsIn(event.x,event.y)
?