Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.10.2016, 01:18   #1
Alex_Kardo
 
Регистрация: 09.11.2015
Сообщений: 7
Восклицание Передача двумерного массива в функции

Здравствуйте! Изучаю SFML, в уроке весь код находиться в одном cpp файле, я решил разнести все как положено по файлам но наткнулся на следующую проблему:
map.h
[CPP]
const int HEIGHT_MAP = 25;//размер карты высота
const int WIDTH_MAP = 40;//размер карты ширина
sf::String TileMap[HEIGHT_MAP] = {
"0000000000000000000000000000000000 000000",
"0 0",
"0 s 0",
"0 s 0",
"0 0",
"0 0",
"0 s 0",
"0 0",
"0 0",
"0 0",
"0 0",
"0 0",
"0 0",
"0 0",
"0 0",
"0 0",
"0 0",
"0 0",
"0 0",
"0 0",
"0 0",
"0 0",
"0 0",
"0 0",
"0000000000000000000000000000000000 000000",
};
[/CPP]
game.h
[CPP]
class Player.....
void update(float); //функция "оживления" объекта класса
void interactionWithMap(); //функция взаимодействия персонажа с объектами карты
[/CPP]
game.cpp
[CPP]
#pragma once
#include "game.h"
#include "map.h"
void Player::update(float time) {
.........
interactionWithMap();//вызываем функцию, отвечающую за взаимодействие с картой
}

void Player::interactionWithMap()//ф-ция взаимодействия с картой
{

for (int i = y / 32; i < (y + h) / 32; i++)
for (int j = x / 32; j<(x + w) / 32; j++)
{
if (TileMap[i][j] == '0')
{
if (dy>0)
{
y = i * 32 - h;
}
if (dy<0)
{
y = i * 32 + 32;
}
if (dx>0)
{
x = j * 32 - w;
}
if (dx < 0)
{
x = j * 32 + 32;
}
}

if ((&TileMap)[i][j] == 's') {
x = 300; y = 300;
(&TileMap)[i][j] = ' ';
}
}
}
[/CPP]
main.cpp
[CPP]
#include <iostream>
#include <SFML/Graphics.hpp>
#include "game.h"
#include "map.h" //подключили код с картой
.............
p.update(time);
.............
[/CPP]
Если все функции взаимодействия с картой будут в main.cpp, то все работает, а в этом виде выдает ошибку, TileMap уже был создан в obj и т.д. Скорее всего нужно передать массив в функцию update, а внутри неё в interactionWithMap. Но как я не пробовал все равно не получается. Встречал подобную проблему, там решили указанием static sf::String TileMap[HEIGHT_MAP], но в этом случае в игре при взаимодействии с объектом происходит, то что и должно произойти (телепортация, увеличение очков), но сам объект не исчезает, т.е. для взаимодействия он изменился и уже не реагирует на взятый предмет, а при прорисовке (функция прорисовки обходит весь массив и вывод тайлы на экран - описана в main) все равно рисует этот объект. Заранее благодарю за помощь.
Alex_Kardo вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передача двумерного массива в функцию Animaria Общие вопросы C/C++ 5 17.09.2014 01:50
передача двумерного массива как параметра функции Yulia_sko.kz Помощь студентам 0 31.03.2012 15:15
Передача двумерного массива в функцию bajaka Visual C++ 9 27.11.2011 16:17
Передача двумерного массива в функцию FelixXXI Общие вопросы C/C++ 3 27.08.2011 18:08
Передача двумерного массива аля матрицы из функции bondik Общие вопросы C/C++ 1 20.05.2009 15:46