|
0 / 0 / 0
Регистрация: 05.02.2020
Сообщений: 15
|
|
Вызвано необработанное исключение: нарушение доступа чтения24.02.2020, 20:08. Показов 1068. Ответов 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 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop?
Ниже её машинный перевод.
После долгих разбирательств я наконец-то вернула себе. . .
|
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод
Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод.
Thinkpad X220 Tablet —. . .
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|