クラスとコンストラクターに関するあらゆる種類のガイドとチュートリアルを調べましたが、これまでのところ、両方の組み合わせをプログラムに実装する方法がわかりませんでした。巨大なロジックブロックが私を回避しているような気がします。コンストラクターが私の関数の変数をどのように入力する必要があるかを人間の言語で説明できる人がいたら、私は非常にありがたいです。私がやりたいことをどうやってやらせるかだけでなく、なぜそれがプログラムにとって意味があるのでしょうか?今年から勉強を始めました。ありがとうございました。これはGBAエミュレーターでコンパイルされるコードですが、私が抱えている問題は純粋にC++の観点からのものです。プログラムのこの投稿に対する追加のコメントの概要を太字で示しています。私がこれまでにやろうとしていることをどのように理解するかは次のとおりです。
コンストラクターを作成します。コンストラクターは、プログラムの後半でメインループからその中の関数の変数値を取得します。このコンストラクターでは、クラスオブジェクトを初めて初期化し、次に、単純に呼び出すムーブメントのボックスを再描画します。コンストラクターから初期値を格納する必要があるクラスオブジェクトに対して。
#include <stdint.h>
#include <stdlib.h>
#include "gba.h"
// A class with variables.
class CHARBOX
{
public:
int init_;
int str_;
int health_;
int posx_;
int posy_;
int width_;
int height_;
int colour_; // someone advised me to name my class variables
// with a special symbol attached.
public:
// This is probably the part where I have not done things right. When this is
// compiling, there is an error saying that there is no matching function to
// call CHARBOX. Which I don`t understand completely.
// Constructor.
CHARBOX(int posx, int posy, int width, int height, int colour)
{
DrawBox(posx, posy, width, height, colour);
}
// Drawing functions.
void DrawBox(int posx_, int posy_, int width_, int height_, int colour_)
{
for (int x = posx_; x < posx_ + width_; x++)
{
for (int y = posy_; y < posy_ + height_; y++)
{
PlotPixel8(x, y, colour_);
}
}
}
};
// The entry point.
int main()
{
// Put the display into bitmap mode 4, and enable background 2.
REG_DISPCNT = MODE4 | BG2_ENABLE;
// Defining some colour palettes.
SetPaletteBG(1, RGB(90,0,0));
SetPaletteBG(2, RGB(0,90,0));
SetPaletteBG(3, RGB(0,0,90));
SetPaletteBG(4, RGB(90,90,0));
SetPaletteBG(5, RGB(90,0,90));
//Here is where the objects get initialized and the constructor is called.
// Draw the player at a starting location.
CHARBOX player(10, 24, 6, 8, 1);
// Draw the enemy at a starting location.
CHARBOX enemy(80, 24, 6, 8, 2);
// main loop.
while (true);
{
// Clear screen and paint background.
ClearScreen8(1);
// Flip buffers to smoothen the drawing.
void FlipBuffers();
// Redraw the player.
if ((REG_KEYINPUT & KEY_LEFT) == 0)
{
player.DrawBox(); // This is where the object gets called
// again to be redrawn.
posx_--;
}
if ((REG_KEYINPUT & KEY_RIGHT) == 0)
{
player.DrawBox();
posx_++;
}
if ((REG_KEYINPUT & KEY_UP) == 0)
{
player.DrawBox();
posy_--;
}
if ((REG_KEYINPUT & KEY_DOWN) == 0)
{
player.DrawBox();
posy_++;
}
WaitVSync();
}
return 0;
}