|
0 / 0 / 0
Регистрация: 05.02.2020
Сообщений: 15
|
|
Вызвано необработанное исключение: нарушение доступа чтения24.02.2020, 20:08. Показов 1086. Ответов 4
при компилировании такая ошибка
помогите пожалуйста вот код #include <SFML/Graphics.hpp> #include "map.h" #include "view.h" #include <iostream> #include <sstream> using namespace sf; ////////////////////////////////////////////////////КЛАСС ИГРОКА//////////////////////// class Player { public: float w, h, dx, dy, x, y, speed; int dir, playerScore, health; bool life, onGround;//добавили переменные состояния нахождения на земле enum { left, right, up, down, jump, stay } state;//добавляем тип перечисления - состояние объекта String File; Image image; Texture texture; Sprite sprite; Player(String F, float X, float Y, float W, float H) { dir = 0; speed = 0; playerScore = 0; health = 100; dx = 0; dy = 0; life = true; onGround = false; File = F; w = W; h = H; image.loadFromFile("images/" + File); image.createMaskFromColor(Color(41, 33, 59)); texture.loadFromImage(image); sprite.setTexture(texture); x = X; y = Y; sprite.setTextureRect(IntRect(0, 134, w, h)); sprite.setOrigin(w / 2, h / 2); } void control() { if (Keyboard::isKeyPressed(Keyboard::Left)) { state = left; speed = 0.1; //currentFrame += 0.005*time; //if (currentFrame > 3) currentFrame -= 3; //p.sprite.setTextureRect(IntRect(96 * int(currentFrame), 135, 96, 54)); } if (Keyboard::isKeyPressed(Keyboard::Right) ) { state = right; speed = 0.1; // currentFrame += 0.005*time; // if (currentFrame > 3) currentFrame -= 3; // p.sprite.setTextureRect(IntRect(96 * int(currentFrame), 232, 96, 54)); } if ((Keyboard::isKeyPressed(Keyboard::Up)) && (onGround)) { state = jump; dy = -0.4; onGround = false;//то состояние равно прыжок,прыгнули и сообщили, что мы не на земле //currentFrame += 0.005*time; //if (currentFrame > 3) currentFrame -= 3; //p.sprite.setTextureRect(IntRect(96 * int(currentFrame), 307, 96, 96)); } if (Keyboard::isKeyPressed(Keyboard: own)) {state = down; speed = 0.1; //currentFrame += 0.005*time; //if (currentFrame > 3) currentFrame -= 3; //p.sprite.setTextureRect(IntRect(96 * int(currentFrame), 0, 96, 96)); } } void update(float time) { control();//функция управления персонажем switch (state)//тут делаются различные действия в зависимости от состояния { case right: dx = speed;break;//состояние идти вправо case left: dx = -speed;break;//состояние идти влево case up: break;//будет состояние поднятия наверх (например по лестнице) case down: break;//будет состояние во время спуска персонажа (например по лестнице) case jump: break;//здесь может быть вызов анимации case stay: break;//и здесь тоже } x += dx * time; checkCollisionWithMap(dx, 0);//обрабатываем столкновение по Х y += dy * time; checkCollisionWithMap(0, dy);//обрабатываем столкновение по Y sprite.setPosition(x + w / 2, y + h / 2); //задаем позицию спрайта в место его центра if (health <= 0) { life = false; } if (health > 100) { health = 100; } dy = dy + 0.0015 * time;//делаем притяжение к земле } float getplayercoordinateX() { return x; } float getplayercoordinateY() { return y; } void checkCollisionWithMap(float Dx, float Dy)//ф ция проверки столкновений с картой { for (int i = y / 32; i < (y + h) / 32; i++) //проходимся по элементам карты for (int j = x / 32; j < (x + w) / 32; j++) { if (TileMap[i][j] == 'g')//если элемент наш тайлик земли? то { if (Dy > 0) { y = i * 32 - h; dy = 0; onGround = true; }//по Y вниз=>идем в пол(стоим на месте) или падаем. В этот момент надо вытолкнуть персонажа и поставить его на землю, при этом говорим что мы на земле тем самым снова можем прыгать if (Dy < 0) { y = i * 32 + 32; dy = 0; }//столкновение с верхними краями карты(может и не пригодиться) if (Dx > 0) { x = j * 32 - w; }//с правым краем карты if (Dx < 0) { x = j * 32 + 32; }// с левым краем карты } } } }; class SpriteManager {//это задел на следующие уроки,прошу не обращать внимания на эти изменения) public: Image image; Texture texture; Sprite sprite; String name; String file; int widthOfSprite; int heightOfSprite; SpriteManager(String File, String Name) { file = File; name = Name; image.loadFromFile("images/" + file); texture.loadFromImage(image); sprite.setTexture(texture); } }; int main() { RenderWindow window(VideoMode(640, 480), "Lesson 20. kychka-pc.ru"); view.reset(FloatRect(0, 0, 640, 480)); Image map_image; map_image.loadFromFile("images/map.png"); Texture map; map.loadFromImage(map_image); Sprite s_map; s_map.setTexture(map); Image gui_image; gui_image.loadFromFile("images/gui.png"); Texture gui; gui.loadFromImage(gui_image); Sprite s_gui_health; s_gui_health.setTexture(gui); Sprite s_gui_score; s_gui_score.setTexture(gui); Font font;//шрифт font.loadFromFile("19057.ttf");//передаем нашему шрифту файл шрифта Text text_score("", font, 25);//создаем объект текст. закидываем в объект текст строку, шрифт, размер шрифта(в пикселях);//сам объект текст (не строка) text_score.setFillColor(sf::Color::Green ); Font font2;//шрифт font.loadFromFile("19057.ttf");//передаем нашему шрифту файл шрифта Text text_time("", font, 25);//создаем объект текст. закидываем в объект текст строку, шрифт, размер шрифта(в пикселях);//сам объект текст (не строка) text_time.setFillColor(sf::Color::Cyan); Font font1;//шрифт font1.loadFromFile("19057.ttf");//передаем нашему шрифту файл шрифта Text text_health("", font, 25);//создаем объект текст. закидываем в объект текст строку, шрифт, размер шрифта(в пикселях);//сам объект текст (не строка) text_health.setFillColor(sf::Color::Red) ;//покрасили текст в красный. если убрать эту строку, то по умолчанию он белый //text.setStyle(sf::Text::Bold); SpriteManager playerSprite("hero.png", "Hero");//это задел на следующие уроки,прошу не обращать внимания) Player p("hero.png", 250, 500, 96, 54); float currentFrame = 0; Clock clock; Clock gameTimeClock; int gameTime = 0; float dX = 0; float dY = 0; int tempX = 0;//временная коорд Х.Снимаем ее после нажатия прав клав мыши int tempY = 0;//коорд Y float distance = 0;//это расстояние от объекта до тыка курсора while (window.isOpen()) { float time = clock.getElapsedTime().asMicroseconds(); if (p.life) gameTime = gameTimeClock.getElapsedTime().asSeconds (); else { view.move(0.8, 0); }//игровое время в секундах идёт вперед, пока жив игрок, перезагружать как time его не надо. оно не обновляет логику игры clock.restart(); time = time / 800; Vector2i pixelPos = Mouse::getPosition(window);//забираем коорд курсора Vector2f pos = window.mapPixelToCoords(pixelPos);//переводим их в игровые (уходим от коорд окна) Event event; ///////////////////////////////////////////Управление персонажем с анимацией//////////////////////////////////////////////////////////////////////// if (p.life) { getplayercoordinateforview(p.getplayerco ordinateX(), p.getplayercoordinateY()); } p.update(time); window.setView(view); window.clear(); for (int i = 0; i < HEIGHT_MAP; i++) for (int j = 0; j < WIDTH_MAP; j++) { if (TileMap[i][j] == ' ') s_map.setTextureRect(IntRect(288, 0, 32, 32)); if (TileMap[i][j] == 's') s_map.setTextureRect(IntRect(160, 0, 32, 32)); if ((TileMap[i][j] == '0')) s_map.setTextureRect(IntRect(256, 0, 32, 32)); if ((TileMap[i][j] == 't')) s_map.setTextureRect(IntRect(96, 0, 32, 32)); if ((TileMap[i][j] == 'h')) s_map.setTextureRect(IntRect(128, 0, 32, 32)); s_map.setPosition(j * 32, i * 32); window.draw(s_map); } std::ostringstream PlayerScoreString; // объявили переменную PlayerScoreString << p.playerScore; //занесли в нее число очков, то есть формируем строку text_score.setString("" + PlayerScoreString.str());//задаем строку тексту и вызываем сформированную выше строку методом .str() text_score.setPosition(view.getCenter(). x - 230, view.getCenter().y - 235);//задаем позицию текста, отступая от центра камеры std::ostringstream PlayerHealthString; PlayerHealthString << p.health; text_health.setString("" + PlayerHealthString.str()); text_health.setPosition(view.getCenter() .x - 320, view.getCenter().y - 235); std::ostringstream gametimeString; // объявили переменную gametimeString << gameTime; //занесли в нее число очков, то есть формируем строку text_time.setString("" + gametimeString.str());//задаем строку тексту и вызываем сформированную выше строку методом .str() text_time.setPosition(view.getCenter().x - 150, view.getCenter().y - 235); s_gui_health.setPosition(view.getCenter( ).x - 280, view.getCenter().y - 235); s_gui_health.setTextureRect(IntRect(32, 0, 32, 32)); s_gui_score.setPosition(view.getCenter() .x - 207, view.getCenter().y - 235); s_gui_score.setTextureRect(IntRect(0, 3, 29, 29)); window.draw(p.sprite); window.draw(text_score); window.draw(text_health); window.draw(text_time); window.draw(s_gui_health); window.draw(s_gui_score); window.display(); } return 0; }
0
|
|
| 24.02.2020, 20:08 | |
|
Ответы с готовыми решениями:
4
Ошибка: Вызвано исключение: нарушение доступа для записи. this было 0xF1EAE5EB Ошибка: "Необработанное исключение: 0xC0000005: Нарушение прав доступа при записи" |
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
|||||||
| 24.02.2020, 20:22 | |||||||
Вернее не циклы, а i-j
0
|
|||||||
|
0 / 0 / 0
Регистрация: 05.02.2020
Сообщений: 15
|
|
| 24.02.2020, 20:29 [ТС] | |
|
нет, все правильно
Добавлено через 3 минуты oleg-m1973, нет все правильно
0
|
|
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
||
| 24.02.2020, 20:34 | ||
|
Посмотри хотя бы - i и j корректные в момент ошибки (в окне Видимые), не выходят за какие-то границы?
0
|
||
|
|
|
| 24.02.2020, 23:47 | |
|
goldbocman, программа вылетает в отладчик с исключением, ты наводишь курсор на i на j, смотришь их значения, наводишь на Tilemap смотришь его размер. Сравниваешь. Думаешь.
0
|
|
| 24.02.2020, 23:47 | |
|
Помогаю со студенческими работами здесь
5
Необработанное исключение в "0x77913ab3" в "x": 0xC0000005: Нарушение прав доступа при чтении "0xdddddddd"
Вызвано исключение по адресу Необработанное исключение Необработанное исключение по адресу 0x0FE6ED76 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Символьное дифференцирование
igorrr37 13.02.2026
/ *
Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2).
Унарный минус обозначается как !
*/
#include <iostream>
#include <stack>
#include <cctype>. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога
Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
|
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
|