【发布时间】:2014-05-25 21:17:10
【问题描述】:
我有一个GameWorld 类,其中我有ALLEGRO_DISPLAY *display;
我正在尝试定义一个具有指向GameWorld 对象的指针的对象,然后它使用它来访问display。在我努力让它正确引用的过程中,我注意到我的指针给我的结果是我所拥有的任何教程/解释/先验知识都无法解释的。
A screenshot of some testing I tried.
现在,在我看来,第 1 行和第 3 行的值应该相同。据我了解,第一行输出display的地址,第二行输出GameWorld的地址。第3行不应该输出GameWorld指向的display的地址吗?
简而言之,如何通过对GameWorld 的引用访问第 1 行输出的相同值?`
GameWorld.cpp:
#include "GameWorld.h"
#include "Assets.h"
#include "Tile.h"
#include <stdio.h>
#include <allegro5/allegro.h>
#include <allegro5/allegro_image.h>
#include <iostream>
#include <array>
GameWorld::GameWorld() {}
GameWorld::~GameWorld()
{
if (display) { al_destroy_display(display); }
if (timer) { al_destroy_timer(timer); }
if (queue) { al_destroy_event_queue(queue); }
}
void GameWorld::Incept()
{
ALLEGRO_DISPLAY *display = NULL;
ALLEGRO_TIMER *timer = NULL;
ALLEGRO_EVENT_QUEUE *queue = NULL;
if (!al_init()) {
fprintf(stderr, "failed to initialize Allegro!\n");
return;
}
if (!al_init_image_addon()) {
fprintf(stderr, "failed to initialize image addons!\n");
return;
}
if (!al_install_keyboard()) {
fprintf(stderr, "failed to initialize keyboard!\n");
return;
}
if (!al_install_mouse()) {
fprintf(stderr, "failed to initialize mouse!\n");
return;
}
display = al_create_display(800, 640);
if (!display) {
fprintf(stderr, "failed to create display!\n");
return;
}
al_clear_to_color(al_map_rgb(0, 0, 0));
al_flip_display();
timer = al_create_timer(1.0 / 60);
if (!timer) {
fprintf(stderr, "failed to create timer!\n");
al_destroy_display(display);
return;
}
queue = al_create_event_queue();
if (!queue) {
fprintf(stderr, "failed to create event queue!\n");
al_destroy_display(display);
al_destroy_timer(timer);
return;
}
al_register_event_source(queue, al_get_display_event_source(display));
al_register_event_source(queue, al_get_timer_event_source(timer));
al_register_event_source(queue, al_get_keyboard_event_source());
al_register_event_source(queue, al_get_mouse_event_source());
Tilesheet = al_load_bitmap("Bin/Tilesheet.bmp");
fprintf(stderr, "Running smooth!\n");
/*
std::array<std::array<int, 5>, 5> Bjergen = Assets::L2;
for (std::size_t i3 = 0; i3 < Bjergen.size(); i3++){
for (std::size_t j3 = 0; j3 < Bjergen[i3].size(); j3++){
std::cout << Bjergen[i3][j3] << " ";
}
std::cout << std::endl;
}
*/
Tile T1(*this, display, 0, 0, 0);
//Tile T2(this, display, 1, 16, 0);
//Tile T3(this, display, 32, 32, 0);
std::cout << display << " actual display" << std::endl;
std::cout << this << " gameworld" << std::endl;
std::cout << this->display << std::endl;
std::cout << &(this->display) << std::endl;
std::cout << (this->display) << std::endl;
std::cout << &this->display << std::endl;
al_start_timer(timer);
bool draw = true;
bool PlayingGame = true;
while (PlayingGame){
ALLEGRO_EVENT ev;
al_wait_for_event(queue, &ev);
// START EVENT LISTENING
if (ev.type == ALLEGRO_EVENT_TIMER){
draw = true;
}
else if (ev.type == ALLEGRO_EVENT_DISPLAY_CLOSE){
PlayingGame = false;
}
else if (ev.type == ALLEGRO_EVENT_KEY_DOWN){
if (ev.keyboard.keycode == ALLEGRO_KEY_DOWN){}
}
else if (ev.type == ALLEGRO_EVENT_KEY_UP){}
else if (ev.type == ALLEGRO_EVENT_MOUSE_BUTTON_DOWN){
std::cout << " (" << ev.mouse.x << "," << ev.mouse.y << ")\n";
}
// END EVENT LISTENING
if (draw && al_is_event_queue_empty(queue)){
al_clear_to_color(al_map_rgb(255, 255, 255));
T1.Draw();
//T2.Draw();
//T3.Draw();
al_flip_display();
}
}
//GAME IS ENDING
al_destroy_display(display);
al_destroy_timer(timer);
al_destroy_event_queue(queue);
}
【问题讨论】:
-
请发布您的代码,而不是代码截图的链接。
-
请把相关代码贴在这里。
-
我猜你已经隐藏了变量,但是没有代码是不可能知道的。
-
this->display可能指代不同的display而不是display -
正如@clcto 所说:
ALLEGRO_DISPLAY *display = NULL;
标签: c++ pointers allegro allegro5