Пятница, 15 Ноября 2024, 20:34

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
Вопрос-Ответ (C++)
KornivalДата: Воскресенье, 04 Сентября 2011, 19:10 | Сообщение # 1
The Witcher
Сейчас нет на сайте
Чтобы не создавать отдельную тему на каждый глупый вопрос, предлагаю задавать их здесь.

Saitei: все вопросы по С задаём в теме Вопрос-Ответ (С). Благодарю за внимание!
goldsphereДата: Воскресенье, 18 Ноября 2012, 13:10 | Сообщение # 701
заслуженный участник
Сейчас нет на сайте
Quote (GECK)
goldsphere, а hge у тебя объявлен глобальной переменной? Ну и создается он не через new, а с помощью функции hgeCreate. И само собой что он должен создаваться до использования.

да, у меня получается такая иерархия файлов:
в objClass.h подключены все инклюды и объявлена HGE *hge; , а objClass подключён к main


FinderX - Android Аркада
НохчиДата: Воскресенье, 18 Ноября 2012, 13:23 | Сообщение # 702
заслуженный участник
Сейчас нет на сайте
Quote (goldsphere)
объявлена HGE *hge;

До любых манипуляций с движком, лучше в самом начале main.
hge = hgeCreate(HGE_VERSION);


Многие вопросы по Windows отпадут, если посмотреть тут
goldsphereДата: Воскресенье, 18 Ноября 2012, 14:03 | Сообщение # 703
заслуженный участник
Сейчас нет на сайте
Quote (Нохчи)
До любых манипуляций с движком, лучше в самом начале main.

попробовал, но в objClass он hge не видит, добавил её туда через extern, всё тоже самое, вообщем вот полный код на данный момент:
objClass.h:

main.cpp:


FinderX - Android Аркада

Сообщение отредактировал goldsphere - Воскресенье, 18 Ноября 2012, 14:17
MR_BorgДата: Воскресенье, 18 Ноября 2012, 17:01 | Сообщение # 704
участник
Сейчас нет на сайте
На крайний случай можно так
sprite = new hgeSprite(hge->Texture_Load(_texture), x, y, w, h);
p.s какая версия движка?


Изучаю C++ попутно пишу игру.
GECKДата: Воскресенье, 18 Ноября 2012, 17:12 | Сообщение # 705
заслуженный участник
Сейчас нет на сайте
Объявлять hge в хедере как внешнюю переменную не стоит. Можно попробовать в начале конструктора написать
Code
HGE *hge = hgeCreate(HGE_VERSION);

и дальше использовать его как обычно. hgeCreate здесь должен возвратить указатель на тот экземпляр hge, который ты создал в main.


Всё гениальное просто. И хреново работает.
Lord_ZeonДата: Воскресенье, 18 Ноября 2012, 17:31 | Сообщение # 706
частый гость
Сейчас нет на сайте
goldsphere,
Во первых конструктор объекта вызывается раньше чем переменная HGE *hge инициализируется.

Можно сделать функцию создания объекта:


И положить в:


Тогда можно быть уверенным что переменная HGE *hge инициализируется раньше чем вызовется инициализация текстуры и спрайта.

И да, для чего здесь цикл?



К тому же исключение может появляться из-за того, что текстура лежит в разных папках проекта.


Сообщение отредактировал Lord_Zeon - Воскресенье, 18 Ноября 2012, 17:31
goldsphereДата: Вторник, 20 Ноября 2012, 07:17 | Сообщение # 707
заслуженный участник
Сейчас нет на сайте
Попробовал ваши варианты, иногда возникает ситуация, что он таки запускается, но нечего не происходит, более того прога не выключается, даже завершением процесса, только перезагрузка компа(или если поезёт, остановкой отладки), но такое происходит только если в коде есть какие-либо манипуляции с объектом Obj. Я был бы очень благодарен если бы вы исправили мой код класса в исходнике и прокомментировали.

FinderX - Android Аркада
Lord_ZeonДата: Вторник, 20 Ноября 2012, 07:47 | Сообщение # 708
частый гость
Сейчас нет на сайте
goldsphere,
Исходники
Вот работающий код, в комментариях не нуждается, как сделать, я описал выше.
goldsphereДата: Четверг, 22 Ноября 2012, 15:18 | Сообщение # 709
заслуженный участник
Сейчас нет на сайте
Quote (Lord_Zeon)
Вот работающий код, в комментариях не нуждается, как сделать, я описал выше.

увы и ах, но у меня он всё равно вылетает, только уже после запуска экрана и логотипа hge, и вылетает уже не на получении текстуры а на получении ширины спрайта. Но раз у вас робит, то я лучше попробую переустановить студию

Добавлено (21.11.2012, 12:05)
---------------------------------------------
Что-то не помагает(

Добавлено (22.11.2012, 14:49)
---------------------------------------------
Вот, что вылетает:


Добавлено (22.11.2012, 15:18)
---------------------------------------------
Вылет на присваивании текстуры я решил. Если кому интересно вот так:

Сейчас вылетает на получении ширины и длины текстуры


FinderX - Android Аркада

Сообщение отредактировал goldsphere - Четверг, 22 Ноября 2012, 15:19
НохчиДата: Четверг, 22 Ноября 2012, 15:50 | Сообщение # 710
заслуженный участник
Сейчас нет на сайте
goldsphere, выкладывай весь проект, который вылетает. Посмотрю.

Многие вопросы по Windows отпадут, если посмотреть тут
goldsphereДата: Пятница, 23 Ноября 2012, 09:14 | Сообщение # 711
заслуженный участник
Сейчас нет на сайте
Исходник

FinderX - Android Аркада
НохчиДата: Пятница, 23 Ноября 2012, 16:15 | Сообщение # 712
заслуженный участник
Сейчас нет на сайте
Текстура должна лежать рядом с экзешником. Она у тебя не загружается и при вызове GetHeight для несуществующей текстуры прога крэшится. Короче, положи текстуру в папки Debug/Release, где у тебя exe

Многие вопросы по Windows отпадут, если посмотреть тут
sem6666Дата: Пятница, 23 Ноября 2012, 20:39 | Сообщение # 713
участник
Сейчас нет на сайте
Как сделать чтоб находил второе наименьшее число?
hero564Дата: Суббота, 24 Ноября 2012, 00:12 | Сообщение # 714
Made in Ukraine
Сейчас нет на сайте
sem6666,
вот напечатал прогу для упорядковувания массива от меньшего значения к большему.Думаю додумаешься как отсюда вывести второе найменьшее число:

Code
#include <iostream>
#include <cmath>
using namespace std;

int main(){
     int temp;   //переменная которая будет хранить промежуточное значение елемента масива
     int arr[10]; //масив с числами

     for (int i=0;i<9;i++){  //заполняем случайными числами
         arr[i]=rand();
     }

     for (int i=0;i<9;i++){  //выводим полученные значения массива
         cout<<arr[i]<<" ";
     }
     cout<<"\n";
     for (int i=0;i<9;i++){      //в этом цикле мы упорядочим массив(числа будут распологатся от меньшего к большему)  
          if (arr[i]>arr[i+1]){  //если текущий елемент массива(i) больше чем следующий(i+1) то меняем их местами. (далее принцип)
             temp=arr[i];    //помещаем значение текущего елемента в нашу спец. переменную
             arr[i]=arr[i+1]; //присваеваем текущему елементу значение следующего елемента
             arr[i+1]=temp;  //получаем значение текущего елемента и присваиваем его следующему елементу
          }
     }
     for (int i=0;i<9;i++){  // выводим на екран упорядоченный масив
         cout<<arr[i]<<" ";
     }
return 0;
}
sem6666Дата: Суббота, 24 Ноября 2012, 00:33 | Сообщение # 715
участник
Сейчас нет на сайте
В том то и дело, что надо сделать основываясь на том коде. Так как препод сказал, если будет использоваться что то что идёт после третьей главы книги, просто завалит на зачёте. А arr и cout, это с пятой главы примерно. Книга Керниган Б.,Ритчи Д. Программирование на C (2-е издание, 2009). Есть как раз по упорядочению код

Но само задание на нахождение двух наименьших чисел.
WPhoeniXWДата: Суббота, 24 Ноября 2012, 01:59 | Сообщение # 716
участник
Сейчас нет на сайте
sem6666, твой синтаксис просто убивает программу , где {} ?
у hero564, C++ . arr - название массива , cout - вывести из потока ( С++) .

Ты начинающий , но код писать не буду .
1 назнач мин1 и мин2 - 0 элементами массива.
2 находищь мин1 (цикл с условием)
3 находишь ещё одно мин , (цикл с условием+чтоб мин2 !=мин 1)


" Кто в страхе живет, тот и гибнет от страха. "
Леонардо Да Винчи


Сообщение отредактировал WPhoeniXW - Суббота, 24 Ноября 2012, 02:33
goldsphereДата: Суббота, 24 Ноября 2012, 15:13 | Сообщение # 717
заслуженный участник
Сейчас нет на сайте
Quote (Нохчи)
Текстура должна лежать рядом с экзешником. Она у тебя не загружается и при вызове GetHeight для несуществующей текстуры прога крэшится. Короче, положи текстуру в папки Debug/Release, где у тебя exe

И всего-то? Я неделю мучил) Спасибо огромное. На всякий случай залатаю этот баг

Добавлено (24.11.2012, 15:13)
---------------------------------------------
У меня такая ситуация, надо считать с файла 2 числа и объявить двухмерный массив с соответствующими размерами, однако так можно делать только с константами, а в константы соответственно не считать значений, есть ли способ решить мою проблему или хотя бы обойти?


FinderX - Android Аркада

Сообщение отредактировал goldsphere - Суббота, 24 Ноября 2012, 06:40
sem6666Дата: Суббота, 24 Ноября 2012, 15:34 | Сообщение # 718
участник
Сейчас нет на сайте
Quote (WPhoeniXW)
3 находишь ещё одно мин , (цикл с условием+чтоб мин2 !=мин 1)

Вот как это сделать, так и не понял что то(
goldsphereДата: Суббота, 24 Ноября 2012, 15:34 | Сообщение # 719
заслуженный участник
Сейчас нет на сайте
И ещё вопрос

содержимое map.nzm:
Code
9 2
1 2 0 3 3 2 2 3 1
1 2 0 3 3 2 2 3 1

Выдаёт
1212033
1203331
Как видите первая строчка вывелась неправильно, я отследил и получается что сначала считываются первые 2 числа со второй строчки, потом 2 числа с 3(на первую пока не обращайте внимание, она относится к предыдущему вопросу), так собственно почему и как исправить?
Попробовал с 5 строками(такими же), правильно вывело только 5-ую( остальные такие : 120331203
P.S Надеюсь я тут не надоел со своими вопросами, а то я уже предвкушаю, что ошибка будет в какой-то мелочи(а так и будет) smile ))
=================================================================================
вопрос решён)


FinderX - Android Аркада

Сообщение отредактировал goldsphere - Воскресенье, 25 Ноября 2012, 10:59
sem6666Дата: Суббота, 24 Ноября 2012, 15:38 | Сообщение # 720
участник
Сейчас нет на сайте
На паре писали такой пример
Code

#include "stdafx.h"
#include <stdio.h>

int A[8]={2,-3,5,7,-1,0,9,2};
int main ()
{
   int min1=A[9];
    int i;   
   for (i=1; i<8; i++)
    if (min1>A[i])
     min1=A[i];   
   printf("Min elements=%d\n", min1);
   return 0;
}

И вот задание, модифицировать его, чтоб найти не одно наименьшее, а два. Добавляю:
Code

int A[8]={2,-3,5,7,-1,0,9,2};
int main ()
{
   int min1=A[9];
   int min2=A[9];
   int i,j;   
   for (i=1; i<8; i++)
    if (min1>A[i])
     min1=A[i];
   {
   for (j=1; j<8; j++)
    if (min2>A[j])
     min2=A[j];   
   printf("Min elements=%d\t%d\n", min1, min2);
   return 0;}
}

А вот как сделать чтоб второй минимум выдавал, так и не пойму. Так равные получаются.


Сообщение отредактировал sem6666 - Суббота, 24 Ноября 2012, 15:48
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг