मेरे पास तीन वर्ग हैं जिन्हें मैं अपने खेल के लिए एक साथ जोड़ने की कोशिश कर रहा हूं। मैं इसे बनाने की कोशिश कर रहा हूं ताकि यदि प्लेयर 1 एक विशिष्ट प्रकार की टाइल पर कदम रखे तो प्लेयर 1 का गुरुत्वाकर्षण चर "एक्सेलवाई" लिफ्ट के प्रभाव को प्रदान करने और खिलाड़ी को लंबवत रूप से ऊपर उठाने में बदल जाएगा। एक प्रारंभिक वर्ग ऑब्जेक्ट प्लेयर 1 बनाता है। (केवल एक खिलाड़ी है इसलिए इसे पूरी कक्षा में लागू किया जा सकता है) इसमें CEntity.h और CPlayer.h के लिए CApp.h मुख्य नियंत्रक वर्ग के माध्यम से हेडर फ़ाइलें शामिल हैं। CPlayer क्लास CEntity का चाइल्ड क्लास है। एक्सेल वाई को सार्वजनिक रूप से CEntity में बिना किसी प्रारंभिक मूल्य के फ्लोट के रूप में घोषित किया गया है। जब खिलाड़ी उस प्रकार की टाइल पर होता है तो मैं इसे CPlayer में बदलना चाहता हूं। मैंने टाइल.एच फ़ाइल में एक if स्टेटमेंट क्लॉज डाला है, लेकिन मैं निम्नलिखित कोड का उपयोग करके वैल्यू को एक्सेस और अपडेट नहीं कर सकता हूं? मैंने शुरुआत में डिफ़ॉल्ट क्लास कन्स्ट्रक्टर का उपयोग करके कोशिश की लेकिन नीचे दिए गए फ़ंक्शन के साथ प्रयास किया है।
CTILE.CPP
#include "CTile.h"
#include "CPlayer.h"
CTile::CTile(){
TileID = 0;
TypeID = TILE_TYPE_NONE;
if(TypeID == TILE_TYPE_LIFT){
CPlayer::LiftTile(0.75f, 10.0f);
//CPlayer::AccelY = 0.75f;
//CPlayer.SpeedY = 2.0;
}
}
CPLAYER.H
public:
CPlayer();
void LiftTile(float x, float y);
CPLAYER.CPP
void CPlayer::LiftTile(float x, float y){
SpeedY = x;
AccelY = y;
}
3 जवाब
आपको अपने सदस्यों तक पहुँचने या इसके सदस्य कार्यों को कॉल करने के लिए किसी वर्ग की वस्तु की आवश्यकता होगी, जब तक कि उस वर्ग में सदस्यों या सदस्य कार्यों को स्थिर घोषित न किया जाए।
CPlayer::LiftTile(0.75f, 10.0f);
केवल तभी काम कर सकता है जब CPlayer::LiftTile()
को घोषित किया गया हो
static void CPlayer::LiftTile(float x, float y); in `CPlayer` class
दूसरा तरीका LiftTitle()
को CPlayer
क्लास का ऑब्जेक्ट बनाकर कॉल करना है, आपको कुछ इस तरह करना होगा:
CTile::CTile()
{
TileID = 0;
TypeID = TILE_TYPE_NONE;
if(TypeID == TILE_TYPE_LIFT)
{
CPlayer obj;
obj.LiftTile(0.75f, 10.0f);
//obj.AccelY = 0.75f; //works if AccelY is declared as public member
//obj.SpeedY = 2.0; //works if SpeedY is declared as public member
}
}
यदि आप AccelY
को क्लास एक्सेस स्पेसिफायर के साथ, CPlayer::AccelY
के रूप में एक्सेस करना चाहते हैं, तो वेरिएबल को static
के रूप में घोषित करने की आवश्यकता है:
class CPlayer {
static float AccelY;
};
यदि आप उपयोग करते हैं तो यह काम करता है
Player1.LiftTile(0.75f, 10.0f);
जैसा कि आपके विशिष्ट खिलाड़ी के लिए फ़ंक्शन को कॉल करता है।
संबंधित सवाल
नए सवाल
c++
C ++ एक सामान्य-प्रयोजन प्रोग्रामिंग भाषा है। यह मूल रूप से C के विस्तार के रूप में डिज़ाइन किया गया था और इसमें एक समान सिंटैक्स है, लेकिन यह अब पूरी तरह से अलग भाषा है। C ++ कंपाइलर के साथ संकलित कोड के बारे में प्रश्नों के लिए इस टैग का उपयोग करें। विशिष्ट मानक संशोधन [C ++ 11], [C ++ 14], [C ++ 17], [C ++ 20] या [C ++ 23], आदि से संबंधित प्रश्नों के लिए संस्करण-विशिष्ट टैग का उपयोग करें। ।
code
स्थिर शून्य लिफ्टटाइल (फ्लोट एक्स, फ्लोट वाई) को पसंद नहीं करता है;code
CPlayer.h में घोषणा या कार्यान्वयनcode
शून्य CPlayer::LiftTile(float x, float y){ SpeedY = x; एक्सेलवाई = वाई; }code
कक्षा मेंCPlayer
का ऑब्जेक्टCTile::CTile()
के अंदर बनाना होगा या आपCplayer
ऑब्जेक्ट कोCTile
क्लास के सदस्य के रूप में और फिरCTile()
के अंदर रख सकते हैं। कंस्ट्रक्टर आप उस ऑब्जेक्ट का उपयोगLiftTile()
को कॉल करने के लिए कर सकते हैं