乒乓球游戏窃听 - 可能指向类的指针
Pong game bugging out - mayby pointer to class
我的代码出现问题,这只是涉及OpenGL的较大代码段的摘录,但仍然演示了问题。它可以在没有碰撞检测调用(col.detect(((的情况下工作 - 如果您认为无弹性墙工作 - 但是当我取消注释它时,程序会中断。代码本身似乎没有什么问题,它编译得很好,但不能按照我期望的方式工作。
感谢所有的帮助此致敬意
碰撞.h
#pragma once
#include "Ball.h"
class collision
{
public:
collision();
collision(Ball ball);
void detect();
~collision();
private:
Ball *point;
};
鲍尔·
#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 };
};
碰撞.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()
{
}
球.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()
{
}
主.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;
}
下面将导致程序在下次使用point
时调用未定义的行为:
collision::collision(Ball ball)
{
point = &ball;
}
其中point
定义为:
Ball *point;
问题是您正在存储具有自动存储持续时间的对象地址。 ball
函数完成后将不复存在,因此point
指向无效对象。
你可能想通过引用来接球;或者更好的是在你的程序中使用std::unique_ptr
或std::shared_ptr
的服务。
更改以下代码
collision::collision(Ball ball)
自
collision::collision(Ball& ball)
它应该解决你的问题。问题是 Ball 是一个局部变量,其地址在构造函数退出后不再有效。解决方案:通过引用发送对象,存储在指针中的地址将是main((函数中创建的对象。
相关文章:
- 1d 智能指针不适用于语法 (*)++
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 为什么使用 "this" 指针调用派生成员函数?
- 函数向量_指针有不同的原型,我可以构建一个吗
- 使用指针从C++中的数组中获取最大值
- 助记符和指向成员语法的指针
- 嵌入方指针压缩已禁用
- 数组的指针从不分段故障
- C++ 指针的内存地址和指向数组的内存地址如何相同?
- 何时在引用或唯一指针上使用移动语义
- QMetaObject invokeMethod的基于函数指针的语法
- 乒乓球游戏窃听 - 可能指向类的指针
- 游戏中的C++指针
- 我不能在不使用指针的情况下返回 2d 数组!我正在制作一个井字游戏类型游戏,这是我的向上移动功能
- 生命的游戏,C++-多态数组(也许还有指针)
- Qt中的2D游戏:初始化怪物并将动态分配的数组作为指针参数传递
- 通过函数指针在游戏引擎数学库中使用SIMD ~一个好主意
- 库的拆分界面(带图形的国际象棋游戏等)与删除每个指针的用户定律
- 在战舰游戏c++中返回一个私有函数指针
- 在战列舰游戏c++中返回一个指向舰船的指针