有没有人知道如何解决这个错误,我有正确的ttf文件所以我不明白为什么我在调试时遇到这个错误这里是我的所有代码我都不是真的知道从哪里开始解决这个问题
#include <iostream>
#include <allegro5/allegro.h>
#include <allegro5/allegro_native_dialog.h>
#include <allegro5/allegro_font.h>
#include <allegro5/allegro_ttf.h>
#include <allegro5/allegro_primitives.h>
#include <allegro5/allegro_image.h>
#include <allegro5/allegro_audio.h>
#include <allegro5/allegro_acodec.h>
#include "Galaxy Quest Source\\globals.h"
#include "Galaxy Quest Source\\buttons.h"
#include "Galaxy Quest Source\\screenState.h"
#include "Galaxy Quest Source\\nebulaBig.h"
#include "Galaxy Quest Source\\tutorialShoot.h"
#include "Galaxy Quest Source\\player.h"
#include "Galaxy Quest Source\\bullets.h"
#include "Galaxy Quest Source\\bulletEnemy.h"
#include "Galaxy Quest Source\\cometBig.h"
#include "Galaxy Quest Source\\cometSmall.h"
#include "Galaxy Quest Source\\healthup.h"
#include "Galaxy Quest Source\\enemyShipNormal.h"
#include "Galaxy Quest Source\\backgroundAnim.h"
int main(int argc, char **argv) {
/*SHELL VARIABLES*/
unsigned short addonCheck = 0;
unsigned long animCounter = 0;
bool running = false;
bool rendering = false;
int gameFPS = 0;
int frames = 0;
float gameTime = 0;
int seconds = 0;
int minutes = 0;
int framesElapsed = 0;
NebulaBig nebulaBigC;
TutorialShoot tutorialShootC;
Buttons *bPlay = new Buttons();
Buttons *bHelp = new Buttons();
Buttons *bOptn = new Buttons();
Buttons *bBack = new Buttons();
Buttons *bExit = new Buttons();
Buttons *bMenu = new Buttons();
Buttons *bExit2 = new Buttons();
Buttons *bVolumeP = new Buttons();
Buttons *bVolumeM = new Buttons();
Buttons *bDifficultyP = new Buttons();
Buttons *bDifficultyM = new Buttons();
Bullet bullets[20];
//BulletEnemy bulletEnemy[20];
CometBig cometsBig[20];
CometSmall cometsSmall[20];
HealthUp healthUp[1];
EnemyShip enemyShip[1];
Player ship;
GameBackground bgStars;
GameBackground bgNebulas;
/*INITIALIZE ALLEGRO 5*/
al_init();
if (!al_init()) {
al_show_native_message_box(0, "ERROR", "Failed to initialize Allegro 5!", "Press OK to terminate.", 0, ALLEGRO_MESSAGEBOX_ERROR);
return -1;
}
/*ALLEGRO VARIABLES*/
ALLEGRO_DISPLAY *display = 0;
ALLEGRO_EVENT_QUEUE *eventQueue = 0;
ALLEGRO_TIMER *timer = 0;
ALLEGRO_BITMAP *mouseBMP;
ALLEGRO_FONT *mainFont, *smallFont, *titleFont, *bigFont;
ALLEGRO_BITMAP *player, *playerDamaged, *playerLeft, *playerRight, *playerShield, *enemyNormal;
ALLEGRO_BITMAP *cometBigBMP, *cometSmallBMP, *livesIconRotated;
ALLEGRO_BITMAP *bulletPlayer, *bulletEnemyBMP;
ALLEGRO_BITMAP *nebulaBig, *nebulaSmall, *nebulaVerySmall;
ALLEGRO_BITMAP *gameScreenFast, *gameScreenNebulas, *livesIcon;
ALLEGRO_BITMAP *tutorialShoot;
ALLEGRO_SAMPLE *introSound;
ALLEGRO_SAMPLE *bulletSound, *explosionSound, *healthdownSound, *healthupSound;
/*CREATE DISPLAY*/
al_set_new_display_flags(ALLEGRO_FULLSCREEN);
display = al_create_display(screenW, screenH);
if (!display) {
al_show_native_message_box(0, "ERROR", "Failed to initialize the display!", "Press OK to terminate.", 0, ALLEGRO_MESSAGEBOX_ERROR);
return -1;
}
al_hide_mouse_cursor(display);
/*INSTALL ADDONS*/
al_init_font_addon(); addonCheck++;
al_init_ttf_addon(); addonCheck++;
al_init_primitives_addon(); addonCheck++;
al_init_image_addon(); addonCheck++;
al_install_keyboard(); addonCheck++;
al_install_mouse(); addonCheck++;
al_install_audio(); addonCheck++;
al_init_acodec_addon(); addonCheck++;
if (addonCheck != 8) {
al_show_native_message_box(0, "ERROR", "Failed to load Allegro addons!", "Press OK to terminate.", 0, ALLEGRO_MESSAGEBOX_ERROR);
return -1;
}
/*FILE LOADING*/
//LOADING SCREEN
bigFont = al_load_font("HOOG0555.ttf", 55, 0);
al_clear_to_color(al_map_rgb(0, 0, 0));
al_draw_text(bigFont, al_map_rgb(255, 255, 255), screenW / 2.5, screenH / 2, 0, "LOADING.");
al_flip_display();
//LOADING IMAGES
titleFont = al_load_font("HOOG0555.ttf", 125, 0);
mainFont = al_load_font("HOOG0555.ttf", 35, 0);
smallFont = al_load_font("HOOG0555.ttf", 15, 0);
ALLEGRO_PATH *imagesP = al_get_standard_path(ALLEGRO_RESOURCES_PATH);
al_append_path_component(imagesP, "images");
al_change_directory(al_path_cstr(imagesP, '/'));
al_destroy_path(imagesP);
mouseBMP = al_load_bitmap("mouse.png");
player = al_load_bitmap("player.png");
playerDamaged = al_load_bitmap("playerDamaged.png");
playerLeft = al_load_bitmap("playerLeft.png");
playerRight = al_load_bitmap("playerRight.png");
playerShield = al_load_bitmap("shield.png");
enemyNormal = al_load_bitmap("enemyShip.png");
cometBigBMP = al_load_bitmap("meteorBig.png");
cometSmallBMP = al_load_bitmap("meteorSmall.png");
bulletPlayer = al_load_bitmap("laserGreen.png");
bulletEnemyBMP = al_load_bitmap("laserRed.png");
nebulaBig = al_load_bitmap("nebulaBig.png");
nebulaSmall = al_load_bitmap("nebulaSmall.png");
nebulaVerySmall = al_load_bitmap("nebulaVerySmall.png");
gameScreenFast = al_load_bitmap("movingBGlines.png");
al_convert_mask_to_alpha(gameScreenFast, al_map_rgb(35, 10, 55));
gameScreenNebulas = al_load_bitmap("movingBGnebulas.png");
al_convert_mask_to_alpha(gameScreenNebulas, al_map_rgb(35, 10, 55));
livesIcon = al_load_bitmap("life.png");
livesIconRotated = al_load_bitmap("life180.png");
tutorialShoot = al_load_bitmap("tutorialShoot.png");
al_draw_text(bigFont, al_map_rgb(255, 255, 255), screenW / 2.5, screenH / 2, 0, "LOADING..");
al_flip_display();
//LOADING SOUNDS
al_reserve_samples(5);
ALLEGRO_PATH *soundsP = al_get_standard_path(ALLEGRO_RESOURCES_PATH);
al_append_path_component(soundsP, "sounds");
al_change_directory(al_path_cstr(soundsP, '/'));
al_destroy_path(soundsP);
introSound = al_load_sample("introSound.wav");
bulletSound = al_load_sample("bulletSound.wav");
explosionSound = al_load_sample("explosionSound.wav");
healthdownSound = al_load_sample("healthdownSound.wav");
healthupSound = al_load_sample("healthupSound.wav");
al_draw_text(bigFont, al_map_rgb(255, 255, 255), screenW / 2.5, screenH / 2, 0, "LOADING...");
al_flip_display();
start:
bPlay->setHover(false);
objectCount = 0;
shieldTimer = 5;
enemyFireTimer = 0;
/*FADE-IN COUNTERS*/
counter255r = 35;
counter255g = 10;
counter255b = 55;
counter185r = 35;
counter185g = 10;
counter185b = 55;
counterHelp185r = 35;
counterHelp185g = 10;
counterHelp185b = 55;
counterHelp255r = 35;
counterHelp255g = 10;
counterHelp255b = 55;
/*GAME OBJECT INITIALIZATION*/
nebulaBigC.init(nebulaBig);
tutorialShootC.init(tutorialShoot);
bPlay->init(screenW / 2, screenH / 2 + 100, 65, 18, bigFont);
bHelp->init(screenW / 2, screenH / 2 + 140, 65, 18, bigFont);
bOptn->init(screenW / 2, screenH / 2 + 180, 65, 18, bigFont);
bBack->init(screenW / 2, screenH - 80, 65, 18, bigFont);
bExit->init(screenW / 2, screenH / 2 + 220, 65, 18, bigFont);
bMenu->init(screenW / 2, screenH / 2 + 40, 65, 18, bigFont);
bExit2->init(screenW / 2, screenH / 2 + 80, 65, 18, bigFont);
bVolumeP->init(screenW / 2 + 90, screenH / 3, 18, 18, bigFont);
bVolumeM->init(screenW / 2 - 90, screenH / 3, 18, 18, bigFont);
bDifficultyP->init(screenW / 2 + 100, screenH / 3 + 175, 18, 18, bigFont);
bDifficultyM->init(screenW / 2 - 100, screenH / 3 + 175, 18, 18, bigFont);
initBullet(bullets, bulletPlayer, bulletSound, explosionSound);
bulletEnemy->init(bulletEnemy, bulletEnemyBMP, bulletSound, explosionSound, healthdownSound);
initCometBig(cometsBig, cometBigBMP, healthdownSound);
initCometSmall(cometsSmall, cometSmallBMP, healthdownSound);
healthUp->init(healthUp, livesIconRotated, healthupSound);
enemyShip->init(enemyShip, enemyNormal, explosionSound);
ship.init(player, playerLeft, playerRight, playerDamaged, playerShield, livesIcon);
bgStars.init(gameScreenFast, 6, 1);
bgNebulas.init(gameScreenNebulas, 2, 2);
/*EQ, TIMER AND REGISTER SOURCES*/
eventQueue = al_create_event_queue();
timer = al_create_timer(1.0 / 120);
al_register_event_source(eventQueue, al_get_timer_event_source(timer));
al_register_event_source(eventQueue, al_get_display_event_source(display));
al_register_event_source(eventQueue, al_get_mouse_event_source());
al_register_event_source(eventQueue, al_get_keyboard_event_source());
/*FINAL PREPERATIONS, START TIMER*/
running = true;
ScreenStateC *screenStateC = new ScreenStateC();
screenStateC->setToState(1);
srand(time(NULL));
al_start_timer(timer);
gameTime = al_current_time();
al_play_sample(introSound, volume, ALLEGRO_AUDIO_PAN_NONE, 1.0, ALLEGRO_PLAYMODE_ONCE, 0);
while (running) {
if (screenState[TITLESCREEN] && !screenState[GAMESCREEN]) {
ALLEGRO_EVENT titleEvent;
al_wait_for_event(eventQueue, &titleEvent);
if (titleEvent.type == ALLEGRO_EVENT_MOUSE_AXES) {
mouseX = titleEvent.mouse.x;
mouseY = titleEvent.mouse.y;
}
if (titleEvent.type == ALLEGRO_EVENT_MOUSE_BUTTON_UP) {
if (!screenState[HELPSCREEN] && !screenState[OPTIONSCREEN] && !screenState[GAMESCREEN]) {
if (bPlay->getHover()) {
if (titleEvent.mouse.button & 1) {
screenStateC->setToState(2);
}
}
if (bHelp->getHover()) {
if (titleEvent.mouse.button & 1) {
screenStateC->setToState(3);
}
}
if (bOptn->getHover()) {
if (titleEvent.mouse.button & 1) {
screenStateC->setToState(4);
}
}
if (bExit->getHover()) {
if (titleEvent.mouse.button & 1) {
screenState[TITLESCREEN] = false;
running = false;
}
}
}
else if (screenState[HELPSCREEN]) {
if (bBack->getHover() & 1) {
screenStateC->setToState(1);
}
}
else if (screenState[OPTIONSCREEN]) {
if (bBack->getHover() & 1) {
screenStateC->setToState(1);
}
if (bVolumeP->getHover() & 1) {
if (volume == 0.0) {
volume = 0.2;
}
else if (volume == 0.2) {
volume = 0.4;
}
else if (volume == 0.4) {
volume = 0.6;
}
else if (volume == 0.6) {
volume = 0.8;
}
else if (volume == 0.8) {
volume = 1.0;
}
}
if (bVolumeM->getHover() & 1) {
if (volume == 0.2) {
volume = 0.0;
}
else if (volume == 0.4) {
volume = 0.2;
}
else if (volume == 0.6) {
volume = 0.4;
}
else if (volume == 0.8) {
volume = 0.6;
}
else if (volume == 1.0) {
volume = 0.8;
}
}
if (bDifficultyP->getHover() & 1) {
if (difficulty[EASY]) {
difficulty[EASY] = false;
difficulty[NORM] = true;
difficulty[HARD] = false;
}
else if (difficulty[NORM]) {
difficulty[EASY] = false;
difficulty[NORM] = false;
difficulty[HARD] = true;
}
}
if (bDifficultyM->getHover() & 1) {
if (difficulty[NORM]) {
difficulty[EASY] = true;
difficulty[NORM] = false;
difficulty[HARD] = false;
}
else if (difficulty[HARD]) {
difficulty[EASY] = false;
difficulty[NORM] = true;
difficulty[HARD] = false;
}
}
}
}
if (titleEvent.type == ALLEGRO_EVENT_DISPLAY_CLOSE) {
running = false;
}
if (titleEvent.type == ALLEGRO_EVENT_KEY_UP) {
switch (titleEvent.keyboard.keycode) {
case ALLEGRO_KEY_F3:
if (keys[F3])
keys[F3] = false;
else if (!keys[F3])
keys[F3] = true;
break;
}
}
if (titleEvent.type == ALLEGRO_EVENT_TIMER) {
rendering = true;
if (screenState[HELPSCREEN]) {
tutorialShootC.update();
if (tutorialShootC.getFinal()) {
if (counterHelp185r < 185)
counterHelp185r++;
if (counterHelp185g < 185)
counterHelp185g++;
if (counterHelp185b < 185)
counterHelp185b++;
if (counterHelp255r < 255)
counterHelp255r++;
if (counterHelp255g < 255)
counterHelp255g++;
if (counterHelp255b < 255)
counterHelp255b++;
}
}
if (nebulaBigC.getFinal()) {
if (counter185r < 185)
counter185r++;
if (counter185g < 185)
counter185g++;
if (counter185b < 185)
counter185b++;
if (counter255r < 255)
counter255r++;
if (counter255g < 255)
counter255g++;
if (counter255b < 255)
counter255b++;
if (counter255g == 254);
bPlay->hoverDetect();
bHelp->hoverDetect();
bOptn->hoverDetect();
bBack->hoverDetect();
bExit->hoverDetect();
bVolumeP->hoverDetect();
bVolumeM->hoverDetect();
bDifficultyP->hoverDetect();
bDifficultyM->hoverDetect();
}
nebulaBigC.update();
framesElapsed++;
seconds = framesElapsed / 120;
if (seconds >= 60) {
minutes++;
seconds = 0;
framesElapsed = 0;
}
frames++;
if (al_current_time() - gameTime >= 1) {
gameTime = al_current_time();
gameFPS = frames;
frames = 0;
}
}
if (rendering && al_is_event_queue_empty(eventQueue)) {
rendering = false;
al_clear_to_color(al_map_rgb(35, 10, 55));
if (!screenState[HELPSCREEN] && !screenState[OPTIONSCREEN]) {
nebulaBigC.render();
al_draw_text(titleFont, al_map_rgb(counter255r, counter255g, counter255b), screenW / 2 - 30, screenH / 7 + 20, 1, "GALAXY");
al_draw_text(titleFont, al_map_rgb(counter255r, counter255g, counter255b), screenW / 2, screenH / 4 + 50, 1, "QUEST");
al_draw_text(smallFont, al_map_rgb(counter255r, counter255g, counter255b), screenW / 2, screenH / 1.05, ALLEGRO_ALIGN_CENTRE, author);
al_draw_text(smallFont, al_map_rgb(counter255r, counter255g, counter255b), screenW / 1.56, screenH / 3 + 54, 1, version);
/*DEBUG MODE*/
if (keys[F3]) {
al_draw_textf(smallFont, al_map_rgb(0, 255, 0), 5, 5, ALLEGRO_ALIGN_LEFT, "FPS: %i", gameFPS);
al_draw_textf(smallFont, al_map_rgb(0, 255, 0), 5, 17, ALLEGRO_ALIGN_LEFT, "Time: %i min, %i sec", minutes, seconds);
al_draw_textf(smallFont, al_map_rgb(0, 255, 0), 5, 29, ALLEGRO_ALIGN_LEFT, "Frames: %i", framesElapsed);
al_draw_textf(smallFont, al_map_rgb(0, 255, 0), 5, 41, ALLEGRO_ALIGN_LEFT, "Mouse X: %i", mouseX);
al_draw_textf(smallFont, al_map_rgb(0, 255, 0), 5, 53, ALLEGRO_ALIGN_LEFT, "Mouse Y: %i", mouseY);
al_draw_filled_rectangle(bPlay->getX() - bPlay->getBoundX(), bPlay->getY(), bPlay->getX() + bPlay->getBoundX(), bPlay->getY() + bPlay->getBoundY() * 2, al_map_rgb(0, 255, 20));
al_draw_filled_rectangle(bHelp->getX() - bHelp->getBoundX(), bHelp->getY(), bHelp->getX() + bHelp->getBoundX(), bHelp->getY() + bHelp->getBoundY() * 2, al_map_rgb(0, 255, 20));
al_draw_filled_rectangle(bOptn->getX() - bOptn->getBoundX(), bOptn->getY(), bOptn->getX() + bOptn->getBoundX(), bOptn->getY() + bOptn->getBoundY() * 2, al_map_rgb(0, 255, 20));
al_draw_filled_rectangle(bExit->getX() - bExit->getBoundX(), bExit->getY(), bExit->getX() + bExit->getBoundX(), bExit->getY() + bExit->getBoundY() * 2, al_map_rgb(0, 255, 20));
}
bPlay->render(1);
bHelp->render(2);
bOptn->render(3);
bExit->render(5);
}
else if (screenState[HELPSCREEN] && !screenState[OPTIONSCREEN]) {
tutorialShootC.render();
al_draw_text(bigFont, al_map_rgb(counterHelp255r, counterHelp255g, counterHelp255b), screenW / 5, 40, 0, "BASICS");
al_draw_text(mainFont, al_map_rgb(counterHelp185r, counterHelp185g, counterHelp185b), screenW / 30, screenH / 6, 0, "Galaxy quest is a space invaders type game,");
al_draw_text(mainFont, al_map_rgb(counterHelp185r, counterHelp185g, counterHelp185b), screenW / 30, screenH / 6 + 35, 0, "in which the is to get the highest");
al_draw_text(mainFont, al_map_rgb(counterHelp255r, counterHelp255g, counterHelp255b), screenW / 30, screenH / 6 + 35, 0, " objective");
al_draw_text(mainFont, al_map_rgb(counterHelp185r, counterHelp185g, counterHelp185b), screenW / 30, screenH / 6 + 70, 0, "possible score. are earned by destroying");
al_draw_text(mainFont, al_map_rgb(counterHelp255r, counterHelp255g, counterHelp255b), screenW / 30 + 5, screenH / 6 + 70, 0, " Points");
al_draw_text(mainFont, al_map_rgb(counterHelp185r, counterHelp185g, counterHelp185b), screenW / 30, screenH / 6 + 105, 0, "comets and enemy space ships.");
al_draw_text(mainFont, al_map_rgb(counterHelp185r, counterHelp185g, counterHelp185b), screenW / 30, screenH / 6 + 140, 0, "Enemy commoness scales with difficulty setting.");
al_draw_text(bigFont, al_map_rgb(counterHelp255r, counterHelp255g, counterHelp255b), screenW / 5, screenH / 2 - 25, 0, "POWER UPS");
al_draw_text(mainFont, al_map_rgb(counterHelp185r, counterHelp185g, counterHelp185b), screenW / 30, screenH / 2 + 70, 0, "During the game you might pick up health power");
al_draw_text(mainFont, al_map_rgb(counterHelp185r, counterHelp185g, counterHelp185b), screenW / 30, screenH / 2 + 105, 0, "ups which will replenish your lives. The higher");
al_draw_text(mainFont, al_map_rgb(counterHelp185r, counterHelp185g, counterHelp185b), screenW / 30, screenH / 2 + 140, 0, "the difficulty, the rarer the power ups!");
/*DEBUG MODE*/
if (keys[F3]) {
al_draw_textf(smallFont, al_map_rgb(0, 255, 0), 5, 5, ALLEGRO_ALIGN_LEFT, "FPS: %i", gameFPS);
al_draw_textf(smallFont, al_map_rgb(0, 255, 0), 5, 17, ALLEGRO_ALIGN_LEFT, "Time: %i min, %i sec", minutes, seconds);
al_draw_textf(smallFont, al_map_rgb(0, 255, 0), 5, 29, ALLEGRO_ALIGN_LEFT, "Frames: %i", framesElapsed);
al_draw_textf(smallFont, al_map_rgb(0, 255, 0), 5, 41, ALLEGRO_ALIGN_LEFT, "Mouse X: %i", mouseX);
al_draw_textf(smallFont, al_map_rgb(0, 255, 0), 5, 53, ALLEGRO_ALIGN_LEFT, "Mouse Y: %i", mouseY);
al_draw_filled_rectangle(bBack->getX() - bBack->getBoundX(), bBack->getY(), bBack->getX() + bBack->getBoundX(), bBack->getY() + bBack->getBoundY() * 2, al_map_rgb(0, 255, 20));
}
bBack->render(4);
}
else if (!screenState[HELPSCREEN] && screenState[OPTIONSCREEN]) {
/*DEBUG MODE*/
if (keys[F3]) {
al_draw_textf(smallFont, al_map_rgb(0, 255, 0), 5, 5, ALLEGRO_ALIGN_LEFT, "FPS: %i", gameFPS);
al_draw_textf(smallFont, al_map_rgb(0, 255, 0), 5, 17, ALLEGRO_ALIGN_LEFT, "Time: %i min, %i sec", minutes, seconds);
al_draw_textf(smallFont, al_map_rgb(0, 255, 0), 5, 29, ALLEGRO_ALIGN_LEFT, "Frames: %i", framesElapsed);
al_draw_textf(smallFont, al_map_rgb(0, 255, 0), 5, 41, ALLEGRO_ALIGN_LEFT, "Mouse X: %i", mouseX);
al_draw_textf(smallFont, al_map_rgb(0, 255, 0), 5, 53, ALLEGRO_ALIGN_LEFT, "Mouse Y: %i", mouseY);
al_draw_filled_rectangle(bBack->getX() - bBack->getBoundX(), bBack->getY(), bBack->getX() + bBack->getBoundX(), bBack->getY() + bBack->getBoundY() * 2, al_map_rgb(0, 255, 20));
al_draw_filled_rectangle(bVolumeP->getX() - bVolumeP->getBoundX(), bVolumeP->getY(), bVolumeP->getX() + bVolumeP->getBoundX(), bVolumeP->getY() + bVolumeP->getBoundY() * 2, al_map_rgb(0, 255, 20));
al_draw_filled_rectangle(bVolumeM->getX() - bVolumeM->getBoundX(), bVolumeM->getY(), bVolumeM->getX() + bVolumeM->getBoundX(), bVolumeM->getY() + bVolumeM->getBoundY() * 2, al_map_rgb(0, 255, 20));
al_draw_filled_rectangle(bDifficultyP->getX() - bDifficultyP->getBoundX(), bDifficultyP->getY(), bDifficultyP->getX() + bDifficultyP->getBoundX(), bDifficultyP->getY() + bDifficultyP->getBoundY() * 2, al_map_rgb(0, 255, 20));
al_draw_filled_rectangle(bDifficultyM->getX() - bDifficultyM->getBoundX(), bDifficultyM->getY(), bDifficultyM->getX() + bDifficultyM->getBoundX(), bDifficultyM->getY() + bDifficultyM->getBoundY() * 2, al_map_rgb(0, 255, 20));
}
al_draw_text(bigFont, al_map_rgb(255, 255, 255), screenW / 2, screenH / 3 - 60, ALLEGRO_ALIGN_CENTRE, "Volume");
if (volume == 0.0)
al_draw_text(mainFont, al_map_rgb(255, 255, 255), screenW / 2, screenH / 3 + 5, ALLEGRO_ALIGN_CENTRE, "0%");
else if (volume == 0.2)
al_draw_text(mainFont, al_map_rgb(255, 255, 255), screenW / 2, screenH / 3 + 5, ALLEGRO_ALIGN_CENTRE, "20%");
else if (volume == 0.4)
al_draw_text(mainFont, al_map_rgb(255, 255, 255), screenW / 2, screenH / 3 + 5, ALLEGRO_ALIGN_CENTRE, "40%");
else if (volume == 0.6)
al_draw_text(mainFont, al_map_rgb(255, 255, 255), screenW / 2, screenH / 3 + 5, ALLEGRO_ALIGN_CENTRE, "60%");
else if (volume == 0.8)
al_draw_text(mainFont, al_map_rgb(255, 255, 255), screenW / 2, screenH / 3 + 5, ALLEGRO_ALIGN_CENTRE, "80%");
else if (volume == 1.0)
al_draw_text(mainFont, al_map_rgb(255, 255, 255), screenW / 2, screenH / 3 + 5, ALLEGRO_ALIGN_CENTRE, "100%");
al_draw_text(bigFont, al_map_rgb(255, 255, 255), screenW / 2, (screenH / 3 + 175) - 60, ALLEGRO_ALIGN_CENTRE, "Difficulty");
if (difficulty[EASY])
al_draw_text(mainFont, al_map_rgb(255, 255, 255), screenW / 2, screenH / 3 + 180, ALLEGRO_ALIGN_CENTRE, "EASY");
else if (difficulty[NORM])
al_draw_text(mainFont, al_map_rgb(255, 255, 255), screenW / 2, screenH / 3 + 180, ALLEGRO_ALIGN_CENTRE, "NORM");
else if (difficulty[HARD])
al_draw_text(mainFont, al_map_rgb(255, 255, 255), screenW / 2, screenH / 3 + 180, ALLEGRO_ALIGN_CENTRE, "HARD");
bBack->render(4);
bVolumeP->render(7);
bVolumeM->render(8);
bDifficultyP->render(9);
bDifficultyM->render(10);
}
al_draw_bitmap(mouseBMP, mouseX, mouseY, 0);
al_flip_display();
al_clear_to_color(al_map_rgb(0, 0, 0));
}
}
/**********************************************************
G A M E L O O P
**********************************************************/
if (screenState[GAMESCREEN] && !screenState[TITLESCREEN]) {
ALLEGRO_EVENT gameEvent;
al_wait_for_event(eventQueue, &gameEvent);
if (gameEvent.type == ALLEGRO_EVENT_MOUSE_AXES) {
mouseX = gameEvent.mouse.x;
mouseY = gameEvent.mouse.y;
}
if (gameEvent.type == ALLEGRO_EVENT_MOUSE_BUTTON_UP) {
if (screenState[MENUSCREEN]) {
if (bExit2->getHover()) {
if (gameEvent.mouse.button & 1) {
screenState[GAMESCREEN] = false;
running = false;
}
}
if (bMenu->getHover()) {
if (gameEvent.mouse.button & 1) {
screenStateC->setToState(1);
goto start;
}
}
}
}
if (counterGame185r > 36) {
al_draw_text(mainFont, al_map_rgb(counterGame185r, counterGame185g, counterGame185b), screenW / 2, screenH / 6, 1, "Use WSAD to move");
al_draw_text(mainFont, al_map_rgb(counterGame185r, counterGame185g, counterGame185b), screenW / 2, screenH / 5 + 30, 1, "Use SPACE to shoot");
}
if (ship.getLives() <= 0) {
al_draw_text(titleFont, al_map_rgb(255, 255, 255), screenW / 2, screenH / 2 - 80, 1, "GAME OVER");
}
al_draw_filled_rectangle(5, 41, shieldTimer / 10, 59, al_map_rgb(255, 204, 0));
al_draw_rectangle(5, 41, 1200 / 10, 59, al_map_rgb(255, 255, 255), 2);
al_draw_textf(smallFont, al_map_rgb(255, 255, 255), 5, 65, 0, "Score: %i", ship.getScore());
/*DEBUG MODE*/
if (keys[F3]) {
al_draw_textf(smallFont, al_map_rgb(0, 255, 0), 5, 77, ALLEGRO_ALIGN_LEFT, "FPS: %i", gameFPS);
al_draw_textf(smallFont, al_map_rgb(0, 255, 0), 5, 89, ALLEGRO_ALIGN_LEFT, "Time: %i min, %i sec", minutes, seconds);
al_draw_textf(smallFont, al_map_rgb(0, 255, 0), 5, 101, ALLEGRO_ALIGN_LEFT, "Frames: %i", framesElapsed);
al_draw_textf(smallFont, al_map_rgb(0, 255, 0), 5, 113, ALLEGRO_ALIGN_LEFT, "Mouse X: %i", mouseX);
al_draw_textf(smallFont, al_map_rgb(0, 255, 0), 5, 125, ALLEGRO_ALIGN_LEFT, "Mouse Y: %i", mouseY);
al_draw_textf(smallFont, al_map_rgb(0, 255, 0), 5, 137, ALLEGRO_ALIGN_LEFT, "Objects: %i", objectCount);
al_draw_textf(smallFont, al_map_rgb(0, 255, 0), 5, 149, ALLEGRO_ALIGN_LEFT, "Lives: %i", ship.getLives());
al_draw_textf(smallFont, al_map_rgb(0, 255, 0), 5, 161, ALLEGRO_ALIGN_LEFT, "Shield: %i", ship.getShield());
al_draw_bitmap(mouseBMP, mouseX, mouseY, 0);
}
if (screenState[MENUSCREEN]) {
/*DEBUG MODE*/
if (keys[F3]) {
al_draw_filled_rectangle(bExit2->getX() - bExit2->getBoundX(), bExit2->getY(), bExit2->getX() + bExit2->getBoundX(), bExit2->getY() + bExit2->getBoundY() * 2, al_map_rgb(0, 255, 20));
al_draw_filled_rectangle(bMenu->getX() - bMenu->getBoundX(), bMenu->getY(), bMenu->getX() + bMenu->getBoundX(), bMenu->getY() + bMenu->getBoundY() * 2, al_map_rgb(0, 255, 20));
}
if (ship.getLives() > 0)
al_draw_text(titleFont, al_map_rgb(255, 255, 255), screenW / 2, screenH / 2 - 80, 1, "PAUSED");
else if (ship.getLives() <= 0)
al_draw_text(titleFont, al_map_rgb(255, 255, 255), screenW / 2, screenH / 2 - 80, 1, "GAME OVER");
bExit2->render(5);
bMenu->render(6);
al_draw_bitmap(mouseBMP, mouseX, mouseY, 0);
}
al_flip_display();
al_clear_to_color(al_map_rgb(0, 0, 0));
}
}
}
delete screenStateC;
delete bPlay;
delete bHelp;
delete bOptn;
delete bBack;
delete bExit;
delete bMenu;
delete bExit2;
delete bVolumeP;
delete bVolumeM;
delete bDifficultyP;
delete bDifficultyM;
al_destroy_display(display);
al_destroy_event_queue(eventQueue);
al_destroy_timer(timer);
al_destroy_bitmap(mouseBMP);
al_destroy_font(mainFont);
al_destroy_font(smallFont);
al_destroy_font(titleFont);
al_destroy_font(bigFont);
al_destroy_bitmap(player);
al_destroy_bitmap(playerDamaged);
al_destroy_bitmap(playerLeft);
al_destroy_bitmap(playerRight);
al_destroy_bitmap(playerShield);
al_destroy_bitmap(bulletPlayer);
al_destroy_bitmap(nebulaBig);
al_destroy_bitmap(nebulaSmall);
al_destroy_bitmap(nebulaVerySmall);
al_destroy_bitmap(livesIcon);
al_destroy_sample(bulletSound);
al_destroy_sample(introSound);
return 0;
}
答案 0 :(得分:0)
您的示例过于庞大,无法破译,但我会给您一些提示。
1)始终初始化变量。
2)不要在al_init运行之前加载资源。这意味着在al_init之前拥有的所有那些对象将自动无法加载所需的任何资源。全局对象也是如此,因为它们是在al_init运行之前创建的。
3)如果没有加载资源,则可能适用以下条件之一:
A)文件名不正确。
B)当前工作目录错误。
C)不支持您尝试加载的资源格式。
您可以通过尝试使用绝对路径来消除3A的资源。如果调用成功,则说明问题出在B),因为该程序在错误的目录中查找文件。如果您排除了A并通过为程序设置正确的工作目录来修复了B,并且加载函数返回了NULL
,则C很可能是答案。
如果C)是问题所在,那么有几种解决方法。
1)确保所使用的allegro版本已内置对所使用格式的支持。
2)向allegro提交补丁,以支持不受支持的格式。