جستجو در تالارهای گفتگو
در حال نمایش نتایج برای برچسب های 'کلیدها'.
1 نتیجه پیدا شد
-
معمولاً در بازی سازی و یا تولید اپلیکیشنهای کاربردی مدیریت رخدادها بسیار مهم بوده و برای استفاده و نشان دادن واکنش بر یک عمل خاص نیازمند توابع و کلاسهای پیچیدهای میباشد که در موتورهای بازی سازی پیاده سازی میشوند. کلاس Event در قالب sf::Event تمامی اطلاعات رخداد از طرف سیستم را ارائه میدهد. برای مثال فشرده شدن کلیدی بر روی صفحه کلید و یا حرکات دستهی بازی و مواردی از این قبیل را میتوان توسط این ماژول مدیریت کرد. یک sf::Event به طور کلی نمونه ای از انواع رخدادها را شامل میشود (حرکات ماوس، فشرده شدن کلید، بسته شدن پنجره و غیره...) همگی حزئیاتی از این رویداد میباشند. برای مثال وقتی شما یک رویداد فشرده شدن کلیدی را دریافت میکنید، بعد از آن باید عضوی از event.key و یا دیگر اعضای مرتبط با event.mouseMove و یا event.text را فراخوانی کنید. برای مثال: sf::Event event; while (window.pollEvent(event)) { // Request for closing the window if (event.type == sf::Event::Closed) window.close(); // The escape key was pressed if ((event.type == sf::Event::KeyPressed) && (event.key.code == sf::Keyboard::Escape)) window.close(); // The window was resized if (event.type == sf::Event::Resized) doSomethingWithTheNewSize(event.size.width, event.size.height); // etc ... } نوع شمارندهی Closed زمانی مورد استفاده قرار میگیرد که پنجره درخواست بسته شدن را درخواست کرده باشد. شمارندهی KeyPressed در هنگام درخواست کلیدی مورد استفاده قرار میگیرد. و یا Keyboard::Escape اشاره به فشرده شدن کلید Esc بر روی صفحه کلید را دارد. نوع Resized زمانی که پنجره درخواست تغییر اندازه را داشته باشد استفاده خواهد شد. نوع TextEntered زمانی که کاراکتری وارد شود عمل میکند. یا انواعی مانند JoystickConnected که در زمان اتصال دستهی بازی عمل میکند. در ادامه لیستی از انواع شمارشی رویدادها آورده شده است. فرض کنیم در محیط بازی یا برنامهی خود قرار است مختصات x و y حرکت ماوس را دریافت نماییم. با استفاده از شرایط رخدادها و به کارگیری کلاس sf::Mouse میتوان این کار را به راحتی انجام داد. تابعی به صورت زیر خواهیم داشت: void MousePosition(){ sf::Mouse ms; std::cout << "Mouse Position X : " << ms.getPosition().x << "\t Y : " << ms.getPosition().y << std::endl; } کلاس Mouse با استفاده از توابع عضو با نام getPosition().x و getPosition.y مختصات x و y حرکت ماوس در محیط پنجره ساخته شده را برمیگرداند. کُد تکمیلی: #include <SFML/Window.hpp> #include <iostream> void MousePosition(){ sf::Mouse ms; std::cout << "Mouse Position X : " << ms.getPosition().x << "\t Y : " << ms.getPosition().y << std::endl; } int main() { sf::Window window(sf::VideoMode(640, 480), "Hello world!"); while (window.isOpen()) { sf::Event event; while (window.pollEvent(event)) { if (event.type == sf::Event::KeyPressed) window.close(); } // check the type of the event... switch (event.type) { // window closed case sf::Event::Closed: window.close(); break; // key pressed case sf::Event::KeyPressed: std::cout << "Key pressed!" << std::endl; break; case sf::Event::MouseMoved: MousePosition(); break; // we don't process other types of events default: break; } } return 0; } کُد فوق را اجرا کرده و نتیحه آن با حرکت ماوس در داخل پنجره به صورت زیر خواهد بود: Mouse Position X : 746 Y : 567 Mouse Position X : 746 Y : 567 Mouse Position X : 746 Y : 567 Mouse Position X : 746 Y : 567 Mouse Position X : 729 Y : 567 Mouse Position X : 729 Y : 567 Mouse Position X : 729 Y : 567 Mouse Position X : 729 Y : 567 Mouse Position X : 729 Y : 567 Mouse Position X : 729 Y : 567 Mouse Position X : 729 Y : 567 Mouse Position X : 729 Y : 567 Mouse Position X : 729 Y : 567 Mouse Position X : 707 Y : 561 Mouse Position X : 707 Y : 561 Mouse Position X : 707 Y : 561 Mouse Position X : 707 Y : 561 Mouse Position X : 707 Y : 561 Mouse Position X : 707 Y : 561 Mouse Position X : 707 Y : 561 Mouse Position X : 679 Y : 551 Mouse Position X : 679 Y : 551 Mouse Position X : 679 Y : 551 Mouse Position X : 679 Y : 551