我一直致力于一个Dark GDK项目,在这个项目中,我将精灵面向光标或鼠标的位置。我选择了一些代码并将其实现到我的应用程序中,但似乎没有正在进行修正。这是一个预览http://gyazo.com/bf57df49071e3a684a7e03b8f0cf4527,正如您所看到的,精灵没有面向光标所在的正确位置,并且它没有正确移动。我相信这是因为Dark GDK不知道我的物体的中心在哪里。谁能帮助我理解我做错了什么?我改变了旋转的值并旋转了精灵,但这根本没有帮助。
// Dark GDK - The Game Creators - www.thegamecreators.com
// the wizard has created a very simple project that uses Dark GDK
// it contains the basic code for a GDK application
// whenever using Dark GDK you must ensure you include the header file
#include "DarkGDK.h"
// the main entry point for the application is this function
void DarkGDK ( void )
{
// turn on sync rate and set maximum rate to 60 fps
dbSyncOn ( );
dbSyncRate ( 60 );
dbLoadImage("hero.png", 1);
dbSprite(1,100,100,1);
// our main loop
while ( LoopGDK ( ) )
{
float dx = dbMouseX() - dbSpriteX(1);
float dy = dbMouseY() - dbSpriteY(1);
dbRotateSprite(1,dbAtanFull(dy,dx));
if(dbEscapeKey() == 1)
{
break;
}
dbSync ( );
}
dbDeleteImage(1);
dbDeleteSprite(1);
// return back to windows
return;
}
答案 0 :(得分:0)
1)精灵的旋转轴位于从左上角开始绘制的点。可以使用以下方法更改轴:
dbOffsetSprite( iD , xOff , yOff );
从图片中可以看出,首选的偏移点是球的中心。
2)面向光标的图像的侧面/边缘(顶部,左侧,右侧,底部)将是0度侧。在任何精灵轴上:........................................... 。 90 ................................................. .............................................. .................................................. ....................... | .................................................. .................................................. .................................................. ............ 180 - O - 0 ............................... .................................................. ............ .................................................. ....................... | .......................... .................................................. ...................... .................................................. ..................... 270 ............................ .................................................. ......... 使用上面的设置,0将始终面向光标。
3.。)要获得面向光标的相应角度,只需在函数内添加(+)该角度:
dbRotateSprite( 1 , dbAtanFull(dy,dx) + 90.0 );