私のコードに問題がありますが、これはOpenGLに関係する大きなコードから抽出されたものですが、まだその問題を実証しています。衝突検出の呼び出し(col.detect())なしで動作します - あなたが壁の動きを妨げていないとみなした場合、私はコメントを外すとプログラムが壊れます。コンパイルしたコード自体は間違っているとは思えませんが、私が期待しているように動作しません。すべての助けをポンゲームの盗難 - maybyクラスへのポインタ
おかげ 敬具
collision.h
#pragma once
#include "Ball.h"
class collision
{
public:
collision();
collision(Ball ball);
void detect();
~collision();
private:
Ball *point;
};
Ball.h
#pragma once
class Ball
{
public:
Ball();
double getpx();
double getpy();
double getvx();
double getvy();
void setpx(const double px);
void setpy(const double py);
void setvx(const double vx);
void setvy(const double vy);
void update();
~Ball();
private:
double position[2] = { 0, 0 };
double velocity[2] = { 0.1, 0 };
};
collision.cpp
#include "collision.h"
collision::collision()
{
}
collision::collision(Ball ball)
{
point = &ball;
}
void collision::detect()
{
if (point->getpx() > 1 || point->getpx() < -1)
point->setvx(-point->getvx());
else if (point->getpy() > 1 || point->getpy() < -1)
point->setvy(-point->getvy());
}
collision::~collision()
{
}
Ball.cpp
#include "Ball.h"
Ball::Ball()
{
}
double Ball::getpx()
{
return position[0];
}
double Ball::getpy()
{
return position[1];
}
double Ball::getvx()
{
return velocity[0];
}
double Ball::getvy()
{
return velocity[1];
}
void Ball::setpx(const double px)
{
position[0] = px;
}
void Ball::setpy(const double py)
{
position[1] = py;
}
void Ball::setvx(const double vx)
{
velocity[0] = vx;
}
void Ball::setvy(const double vy)
{
velocity[1] = vy;
}
void Ball::update()
{
position[0] += velocity[0];
position[1] += velocity[1];
}
Ball::~Ball()
{
}
main.cppに以下
#include <iostream>
#include "Ball.h"
#include "collision.h"
using namespace std;
int main()
{
Ball tennis;
collision col(tennis);
while (true)
{
tennis.update();
col.detect();
cout << tennis.getpx() << endl;
cin.get();
}
return 0;
}
編集:collision :: detect()のif文をifに変更すると、col.detect();を使用してプログラムが実行されない部分が解決されます。これは、xとyの両方の衝突条件を同時にテストするのを止めます。 –
ポインタ、リファレンス、値の違いとデバッガの使い方を学んでください。おそらく、 'collision :: collision(Ball&ball)'が必要になります。ここでは、関数の復帰時に破棄される変数のアドレスを取って、Ballのコピーを作成しています。 – stijn