פורסם 2008 בינואר 1017 שנים שלום,ניסיתי לבנות תוכנית בסיסית עם GUI של Hello World ב-CPP על בסיסי המאמר הנ"ל:http://www.cprogramming.com/tutorial/opengl_first_windows_app.htmlאני משתמש ב-Dev-C++ וכשאני מנסה להדר הוא אומר שהוא לא מוצא את הקובץ stdafx.h.הבנתי שהקובץ הזה שייך ל-Visual Studio, האם יש דרך להשתמש בקובץ אחר במקום זה עם אותו קוד או שאני צריך לכתוב קוד שונה?ואם אפשר אז אני אשמח גם לקבל לינקים ללמידת GUI ב-CPP ללא VS.תודה מראש!נ.ב.הקוד בדיוק כמו בלינק אבל אם למישהו אין כוח להכנס אז הנה הקוד:/* Trim fat from windows*/#define WIN32_LEAN_AND_MEAN#pragma comment(linker, "/subsystem:windows")/* Pre-Processor directives*/#include "stdafx.h"#include <windows.h>/* Windows Procedure Event Handler*/LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam){ PAINTSTRUCT paintStruct; /* Device Context*/ HDC hDC; /* Text for display*/ char string[] = "Hello, World!"; /* Switch message, condition that is met will execute*/ switch(message) { /* Window is being created*/ case WM_CREATE: return 0; break; /* Window is closing*/ case WM_CLOSE: PostQuitMessage(0); return 0; break; /* Window neeeds update*/ case WM_PAINT: hDC = BeginPaint(hwnd, &paintStruct); /* Set txt color to blue*/ SetTextColor(hDC, COLORREF(0x00FF0000)); /* Display text in middle of window*/ TextOut(hDC,150,150,string,sizeof(string)-1); EndPaint(hwnd, &paintStruct); return 0; break; default: break; } return (DefWindowProc(hwnd,message,wParam,lParam));}/* Main function*/int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow){ WNDCLASSEX windowClass; //window class HWND hwnd; //window handle MSG msg; //message bool done; //flag saying when app is complete /* Fill out the window class structure*/ windowClass.cbSize = sizeof(WNDCLASSEX); windowClass.style = CS_HREDRAW | CS_VREDRAW; windowClass.lpfnWndProc = WndProc; windowClass.cbClsExtra = 0; windowClass.cbWndExtra = 0; windowClass.hInstance = hInstance; windowClass.hIcon = LoadIcon(NULL, IDI_APPLICATION); windowClass.hCursor = LoadCursor(NULL, IDC_ARROW); windowClass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); windowClass.lpszMenuName = NULL; windowClass.lpszClassName = "MyClass"; windowClass.hIconSm = LoadIcon(NULL, IDI_WINLOGO); /* register window class*/ if (!RegisterClassEx(&windowClass)) return 0; /* Class registerd, so now create window*/ hwnd = CreateWindowEx(NULL, //extend style "MyClass", //class name "A Real Win App", //app name WS_OVERLAPPEDWINDOW | //window style WS_VISIBLE | WS_SYSMENU, 100,100, //x/y coords 400,400, //width,height NULL, //handle to parent NULL, //handle to menu hInstance, //applcation instance NULL); //no extra parameter's /* Check if window creation failed*/ if (!hwnd) return 0; done = false; //initialize loop condition variable /* main message loop*/ while (!done) { PeekMessage(&msg,hwnd,NULL,NULL,PM_REMOVE); if (msg.message == WM_QUIT) //check for a quit message done = true; //if found, quit app else { // Translate and dispatch to event queue*/ TranslateMessage(&msg); DisplatchMessage(&msg); } } return msg.wParam;}
פורסם 2008 בינואר 1017 שנים זה כל מה שמכיל stdafx:#pragma once#ifndef _WIN32_WINNT // Allow use of features specific to Windows XP or later. #define _WIN32_WINNT 0x0501 // Change this to the appropriate value to target other versions of Windows.#endif #include <stdio.h>#include <tchar.h>אתה ככל הנראה לא צריך אותו בכלל.חוץ מזה, למה לך ללמוד Windows API? זה אחד הדברים היותר מיושנים ומגעילים.עדיף שתנסה להשתמש בחבילות יותר מתקדמות (כגון MFC) או שבכלל תלמד שפה שבה הרבה יותר נוח לעבוד עם GUI (כמו #C).
פורסם 2008 בינואר 1017 שנים stdafx הוא קובץ יחודי ל-visual studio, עד כמה שאני יודע. כנ"ל #pragma once.כנראה שיש לך אוסף קבצים שמיועדים ל-visual studio ולא יעבדו על dev-c++ (שהוא בגדול מבוסס gcc) בלי שינויים.קח בשחשבון כל מה שאמרתי יכול להיות שגוי במקרה שלך, אבל זה הניחוש הראשון שלי.
פורסם 2008 בינואר 1017 שנים מחבר זה כל מה שמכיל stdafx:#pragma once#ifndef _WIN32_WINNT // Allow use of features specific to Windows XP or later. #define _WIN32_WINNT 0x0501 // Change this to the appropriate value to target other versions of Windows.#endif #include <stdio.h>#include <tchar.h>אתה ככל הנראה לא צריך אותו בכלל.חוץ מזה, למה לך ללמוד Windows API? זה אחד הדברים היותר מיושנים ומגעילים.עדיף שתנסה להשתמש בחבילות יותר מתקדמות (כגון MFC) או שבכלל תלמד שפה שבה הרבה יותר נוח לעבוד עם GUI (כמו #C).אז מה בעצם אני אעשה עם מה שלמדתי ב-CPP? סתם הולך לפח ועכשיו אני צריך ללמוד C# מההתחלה?מה רע ב-GUI שב-CPP?
פורסם 2008 בינואר 1117 שנים אז מה בעצם אני אעשה עם מה שלמדתי ב-CPP? סתם הולך לפח ועכשיו אני צריך ללמוד C# מההתחלה?מה רע ב-GUI שב-CPP?לא רע, זה פשוט סיוט. הרבה דברים ניסיתי ללמוד רובם הבנתי מפעם שנייה/שלישית ואת WIN API לא הבנתי עדיין. עם כל הכבוד למיקרוסופט ולפשוט שאליה הם מנסים להגיע אבל WIN API SUX.מי אמר לזרוק לפח? לדעתך CPP זה רק לשימוש ב WIN API? לא צריך לזרוק כלום לפח. לא צריך להיתעסק עם WIN API ו MFC לדעתי האישית. עדיף לנסות ספריות כמו WxWidgets או GTK(נראה לי שהוא גם לחלונות). תריץ חיפוש בגוגל ותגלה עד מה פשוטים יכולים להיות הדברים.
פורסם 2008 בינואר 1117 שנים בלי שום קשר ל-Win API או ל-MFC, מה שיש לך שם זה קובץ שמכיל דברים שמתאימים רק לקומפיילר ספציפי, וכנראה בכלל לא נחוצים.אני מציע לך למצוא שלד של תוכנית ריקה ב-nehe או באתר של SDL.
פורסם 2008 בינואר 1117 שנים מחבר אם כבר הגענו לנושא הזה אז, למה בעיקר משמשת CPP?אחרי שלמדתי את הבסיס של השפה לאיזה תחומים אני יכול להמשיך כרגע?כי אני פשוט חשבתי להמשיך לכיוון של תוכנות ומשחקים אז הלכתי על GUI..
פורסם 2008 בינואר 1117 שנים השאלה של "למה משמשת ++C" נשאלה עשרות פעמים בפורום.בגדול, משתמשים בשפות low level כמו ++C/C כשאתה צריך לעבוד ברמת מערכת ההפעלה (לדוגמה אם אתה כותב דרייוורים, לדוגמה) או אם אתה צריך לכתוב קוד מאוד יעיל (אם אתה כותב מערכות real time, או מתכנת משחקים שמצריכים אלגוריתמים כבדים).בהרבה מקרים כותבים תוכנה שהמנוע שלה ב-++C, וממשק המשתמש שלה (או ממשקים אחרים) כתובים בשפות יותר high level כמו ג'אווה או #C.
פורסם 2008 בינואר 1117 שנים אם כבר הגענו לנושא הזה אז, למה בעיקר משמשת CPP?אחרי שלמדתי את הבסיס של השפה לאיזה תחומים אני יכול להמשיך כרגע?כי אני פשוט חשבתי להמשיך לכיוון של תוכנות ומשחקים אז הלכתי על GUI..בתיכנות משחקים ה GUI ממומש בכלל בצורה אחרת. אתה לא משתמש בחלונות של מערכת הפעלה אתה כותב משלך/משתמש בספריות מוכנות, שהמטרה שלהם היא ליצור כפתורים על ידי ציור קווים הדפס טקסטים.
פורסם 2008 בינואר 1117 שנים מחבר אני יודע פיזיקה ברמה די גבוהה והייתי רוצה להמשיך לכיוון של בניית מנוע גרפי או פיזיקלי. ברור לי שזה דבר מאוד מסובך שלוקח המון זמן ואני גם לא אגיע למנוע ברמה גבוהה במיוחד אבל זה מה שמעניין אותי.מאיפה למעשה אני מתחיל כרגע לאחר שאני יודע את הבסיס של CPP?
פורסם 2008 בינואר 1117 שנים יש איפה שהוא הסבר של איזה אדם אחד שקוראים לו Ninja משהוא, הוא מציג יפה מאוד את הרעיון של "בניית מנוע", לא מצליח למצוא עכשיו.בהתחלה כשנכנסתי לתחום המשחקים (כרגע אני נמצא כ שנה וחצי בתחום) גם רציתי לבנות "מנוע". לא יודע ההגדרה של "מנוע" היא לא נכונה, ישר קופץ לראש תמונה של מנוע ממכונית => שמכונית בלי מנוע לא תעבוד. ואז תנקלתי במדריך של ההוא שהזכרתי למעלה, הוא אמר בדיוק את מה שאמרתי עכשיו והוסיף "אם אתה רוצה לבנות משחקים, תבנה משחקים". ובתכלס שים לב קודם היה Unreal Tournament אחרי זה הופיע מנוע Unreal. קודם היה HL אחרי זה פותח המנוע VALVE (עד כמה שידוע לי) שעליו מבוססים כל המשחקים כמו CS, DOD וכו'.למה אני אומר את זה? תכלס לא אכפת לי אתה יכול לבנות מנוע, דיי בטוח שתצבור ידע הן באספקטים של OOP ושפת תיכנות שבה תבנה והן באספקטים של גרפיקיה/פיזיקה, אבל סביר להניח שתיכשל. השאלה האם הכשלון יהיה שווה את זה? נצא מהנחה שתצליח לבנות אחד אבל לא תוכל להריץ עליו כלום (מניסיון).תחליט מה אתה רוצה באמת לבנות משחק או לבנות מנוע? סביר להניח שגם בניית משחק ילווה בכשלון בסוף אבל אתה תיצבור ידע, לדעתי האישית הרבה יותר שימושי מידע שתצבור מבניית מנוע עם המטרה שלך זה לבנות משחק.מאיפה להתחיל? אין מדריך שמסביר מ A עד Z איך לבנות מנוע, כמו כן גם אין מדריך שמסביר מא' ועד ת' איך לבנות משחק. תתחליט במה אתה רוצה להיתמקד, משחקים זה תחום גדול, אמרת יש לך ידע בפיזיקה אולי הצד שתרצה לקחת בפיתוח משחקים הוא אכן מידול פיזיקיה, ואולי תעדיף תיכנות כללי, או תמכנת גראפי, משחק זה שם כולל להרבה אנשים אם ידע שונה.טוב חפרתי מספיק, תבחר נושא או שתיים שעליהם תרצה להיתמקד ומשם אוכל לכוון אותך יותר.כמו כן יש את www.gamedev.net (שכרגע ב maintenance)[מקווה שמותר לפרסם פורום אחר, אם לא מצטער מראש נא למחוק] זה פורטל ופורום לכל דבר, יש שם אלף ואחד מדריכים על כל הנושאים החל מתיכנות רגיל ועד לבינה מלכותית, מדריכים ב 2/3D גרפיקה, פזיקיה, מטמטיקה, רשתות, אבטחת מידע וכמובן פורומים לתמיכה בכל אחד מהנושאים.עריכה: הנא המאמרhttp://scientificninja.com/advice/write-games-not-engines
פורסם 2008 בינואר 1117 שנים תחפש את simple directmedia layer או בשמה האחר libsdl. זו נקודת התחלה אפשרית.[br]פורסם בתאריך: 11.01.2008 בשעה 17:10:34מלבנות מנוע פיסיקלי (למעשה כל מערכת קצת מסובכת), גם אם הוא כושל, אתה תלמד הרבה מאוד. כן, לא תוכל (לפחות לא בהתחלה) להדביק מנועים קיימים, אבל זו לא סיבה לא לעשות את זה.
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.