2012-12-31 36 views
0

好吧,所以我有兩個問題。首先,我製作了一個正方形,鎖定在與我的瓷磚尺寸相同的柵格上。這將用於更換瓷磚。除了當我開始滾動時,它工作正常。我知道這是爲什麼。這是因爲鼠標位置相對於窗口而不是地圖。我想知道是否有一種方法可以編碼方塊,即使在滾動時也可以跟隨我的鼠標。SFML鼠標位置和文件碰撞加載

當前代碼:

if (Event.type == sf::Event::MouseMoved) 
     { 

      rect.setFillColor(sf::Color(255, 0, 255)); 
      rect.setSize(sf::Vector2f(BLOCKSIZE, BLOCKSIZE)); 
      int x_offset = (Window.getView().getCenter().x - Window.getSize().x /2); 
      int y_offset = (Window.getView().getCenter().y - Window.getSize().y /2); 

      rect.setPosition(((sf::Mouse::getPosition(Window).x/32 *32) + (x_offset/32 *32)), ((sf::Mouse::getPosition(Window).y/32 * 32) + (y_offset/32 * 32))); 
      std::cout << "Mouse position: x:" << ((sf::Mouse::getPosition(Window).x/32 *32) + (x_offset/32 *32)) << " y:" << ((sf::Mouse::getPosition(Window).y/32 * 32) + (y_offset/32 * 32)) << ")\n\n"; 
     } 

接下來的問題是裝載碰撞。

代碼:

for(int i = 0; i < CollisionVector.size(); i++) 
    { 
     //Loop through the height of the MapVector 
     for(int j = 0; j < CollisionVector[i].size(); j++) 
     { 
      sf::RectangleShape rect; 
      //If the stored number is 1 
      if(CollisionVector[i][j] == 1) 
      { 
       rect.setFillColor(sf::Color(255, 0, 255)); 
       rect.setSize(sf::Vector2f(BLOCKSIZE, BLOCKSIZE)); 
       //Set the position of the rectangle 
       rect.setPosition(j * BLOCKSIZE, i * BLOCKSIZE); 
      } 
      //Draw the rectangle 
      Window.draw(rect); 
     } 
    } 

,我得到了一個空白頁面,如果我補充一點,我想要的矩形是透明的,但我改成了粉紅色只是這是問題的情況下(這是不是。 )

屏幕滾動代碼:

void Camera::Update(float x, float y) 
{ 
    cameraX = x - (ScreenWidth/2); 
    cameraY = y - (ScreenHeight/2); 

    if (cameraX < 0) 
     cameraX = 0.0; 
    if (cameraY < 0) 
     cameraY = 0.0; 

    CameraPosition.reset(sf::FloatRect(cameraX, cameraY, ScreenWidth, ScreenHeight)); 
    CameraPosition.setViewport(sf::FloatRect(0,0,1,1)); 
} 

回答

0

對於第一個:因爲你是通過改變sf::View滾動計算的觀點偏移和它添加到您的座標:

[...] 
float x_offset = Window.getView().getCenter().x - Window.getSize().x * .5f; 
float y_offset = Window.getView().getCenter().y - Window.getSize().y * .5f; 

rect.setPosition(sf::Mouse::getPosition(Window).x/32 * 32 + x_offset, 
      sf::Mouse::getPosition(Window).y/32 * 32 + y_offset; 

對於第二個......呃,我現在什麼都沒有了。我已經檢查了SFML,並且sf::RectangleShape被默認初始化爲(0,0)的大小,所以這不是問題。也許問題在於周圍的代碼?

+0

使用滾動代碼編輯OP,你能發表一個如何修復2的例子嗎?無論我在哪裏放置繪圖功能,我都會看到白色的屏幕。 – user1816388

+0

在hth中編輯了一些代碼。 –

+0

我得到一個白色屏幕 – user1816388