Page 41 of 50

Re: C++ -kysymykset

Posted: Mon Feb 07, 2011 2:45 pm
by mkn
Miten c++ saa vaihdettua tekstin värin ja saa sijoitettua tekstin x,y koordinaatteihin? Mielellään ilman sdl, opengl ym.

Re: C++ -kysymykset

Posted: Mon Feb 07, 2011 2:52 pm
by esa94
mkn wrote:Miten c++ saa vaihdettua tekstin värin ja saa sijoitettua tekstin x,y koordinaatteihin? Mielellään ilman sdl, opengl ym.
Curses
EDIT:

Riippuen alustasta joko PDCurses tai ncurses


Re: C++ -kysymykset

Posted: Mon Feb 07, 2011 2:55 pm
by mkn
Olen aloittanut c++ pari viikkoa sitten ---> olen huono :D
Voisitko kertoa millä "funktiolla?" se onnistuu.

Re: C++ -kysymykset

Posted: Mon Feb 07, 2011 4:26 pm
by esa94
mkn wrote:Olen aloittanut c++ pari viikkoa sitten ---> olen huono :D
Voisitko kertoa millä "funktiolla?" se onnistuu.
RTFM or GTFO :V

Re: C++ -kysymykset

Posted: Mon Feb 07, 2011 7:39 pm
by MaGetzUb
MKN, miksi ei SDL kelpaa?

Re: C++ -kysymykset

Posted: Tue Feb 08, 2011 5:06 pm
by mkn
Kun kääntää sdl ohjelman niin se kaatuu :( Olen noudattanut ohjelmointiputkan sdl oppaan esimerkkejä tarkasti mutta ei toimi siitä huolimatta :(

Re: C++ -kysymykset

Posted: Tue Feb 08, 2011 6:04 pm
by Latexi95
mkn wrote:Kun kääntää sdl ohjelman niin se kaatuu :( Olen noudattanut ohjelmointiputkan sdl oppaan esimerkkejä tarkasti mutta ei toimi siitä huolimatta :(
Ja koodi kiitos...

Re: C++ -kysymykset

Posted: Wed Feb 09, 2011 3:22 pm
by mkn
http://www.ohjelmointiputka.net/opas.php?tunnus=sdl3
Ohjelmointiputkan sdl-opas 3 ja tuton alin koodi.
Toimii veljeni koneella, mutta itselläni se vain kaatuu :(

Re: C++ -kysymykset

Posted: Wed Feb 09, 2011 5:01 pm
by Feuer

Code: Select all

#include <Windows.h>
#include <fstream>
#include <iostream>

int FileSize(const char* sFileName) //kotoisin osoitteesta http://www.codeproject.com/KB/files/filesize.aspx
{
  std::ifstream f;
  f.open(sFileName, std::ios_base::binary | std::ios_base::in);
  if (!f.good() || f.eof() || !f.is_open()) { return 0; }
  f.seekg(0, std::ios_base::beg);
  std::ifstream::pos_type begin_pos = f.tellg();
  f.seekg(0, std::ios_base::end);
  return static_cast<int>(f.tellg() - begin_pos);
}


bool tulostaTavut(const char* polku)
{
	int size = FileSize(polku);

	if(size<1) //tyhjä tai olematon tiedosto :)
	{
		MessageBox(NULL,L"Tiedostohärö",L"Tiedostohärö",NULL);
		return false;
	}

	std::ifstream f(polku,std::ios::in | std::ios::binary);

	unsigned char* sisältö = new unsigned char[size];

	if(f.is_open())
	{
		f.read((char*)sisältö,size);

		for(int i=0; i<size; i++)
		{
			std::cout<<"Kohdassa "<<i<<" lukee: "<<(int)sisältö[i]<<std::endl;
		}
	}
	
	delete [] sisältö;
	
	f.close();
	return true;
}
Miksi pelkkä tuollaisen koodilohkon mukanaolo saa ohjelman kaatumaan sulkeutuessa, vaikkei sitä kutsuta? Ja mikä olisi turvallinen tapa lukea tiedostosta N tavua johonkin containeriin? Lisäksi, mikä ylläolevassa on väärin?

Re: C++ -kysymykset

Posted: Wed Feb 09, 2011 5:11 pm
by Sami345
Feuer wrote:

Code: Select all

#include <Windows.h>
#include <fstream>
#include <iostream>

int FileSize(const char* sFileName) //kotoisin osoitteesta http://www.codeproject.com/KB/files/filesize.aspx
{
  std::ifstream f;
  f.open(sFileName, std::ios_base::binary | std::ios_base::in);
  if (!f.good() || f.eof() || !f.is_open()) { return 0; }
  f.seekg(0, std::ios_base::beg);
  std::ifstream::pos_type begin_pos = f.tellg();
  f.seekg(0, std::ios_base::end);
  return static_cast<int>(f.tellg() - begin_pos);
}


bool tulostaTavut(const char* polku)
{
	int size = FileSize(polku);

	if(size<1) //tyhjä tai olematon tiedosto :)
	{
		MessageBox(NULL,L"Tiedostohärö",L"Tiedostohärö",NULL);
		return false;
	}

	std::ifstream f(polku,std::ios::in | std::ios::binary);

	unsigned char* sisältö = new unsigned char[size];

	if(f.is_open())
	{
		f.read((char*)sisältö,size);

		for(int i=0; i<size; i++)
		{
			std::cout<<"Kohdassa "<<i<<" lukee: "<<(int)sisältö[i]<<std::endl;
		}
	}
	
	delete [] sisältö;
	
	f.close();
	return true;
}
Miksi pelkkä tuollaisen koodilohkon mukanaolo saa ohjelman kaatumaan sulkeutuessa, vaikkei sitä kutsuta? Ja mikä olisi turvallinen tapa lukea tiedostosta N tavua johonkin containeriin? Lisäksi, mikä ylläolevassa on väärin?
Äkkiä tuosta pisti silmään ainakin, että muuttujanimesi sisältää ääkkösiä. Se saattaa laittaa kääntäjän tekemään hassuja.

Re: C++ -kysymykset

Posted: Wed Feb 09, 2011 5:29 pm
by Feuer
Olisi eka kerta kun minä löydän Visual C++n käännöksistä ääkkösongelmia muualta kuin komentorivitulosteesta :P

Joka tapauksessa, muutin sisältö-muuttujan sisalto-muuttujaksi, eikä ongelma lähtenyt mihinkään :)

Re: C++ -kysymykset

Posted: Wed Feb 09, 2011 8:26 pm
by temu92
mkn wrote:http://www.ohjelmointiputka.net/opas.php?tunnus=sdl3
Ohjelmointiputkan sdl-opas 3 ja tuton alin koodi.
Toimii veljeni koneella, mutta itselläni se vain kaatuu :(
Onko sulla varmasti kaikki kuvat ja tarvittavat dll:t koneella?

Re: C++ -kysymykset

Posted: Thu Feb 10, 2011 12:16 pm
by Feuer
Teinpä tutkimuksia tuosta omasta ongelmastani: kun projekti sisältää nuo pari viestiä sitten mainitsemani funktiot ja mainin joka kutsuu tulostaTavut() - funktiota, kaikki toimii ihan kauniisti, mutta erään SDL-projektin kyljessä tuo käyttäytyy kuten kerroin.

Lisäksi, kun tuosta projektista kommentoi ulos kaiken fstreamiin liittyvän, ohjelma pysyy aivan kauniisti pystyssä loppuun asti. SDLllä lienee siis jotain fstreamia vastaan -> kannattaisi kokeilla toteuttaa tuo tiedoston lukeminen C:n tiedostoapilla?
EDIT:

Vika lienee koneen käyttäjässä jos homma ei pelaa...
Tämän takia kohellan mielummin itse kuin tulen kysymään apua, jonka antaminen voisi joskus jopa johtaa johonkin järkevään lopputulokseenkin >:([/edit]

Re: C++ -kysymykset

Posted: Fri Feb 11, 2011 10:31 am
by KilledWhale
Feuer wrote:Teinpä tutkimuksia tuosta omasta ongelmastani: kun projekti sisältää nuo pari viestiä sitten mainitsemani funktiot ja mainin joka kutsuu tulostaTavut() - funktiota, kaikki toimii ihan kauniisti, mutta erään SDL-projektin kyljessä tuo käyttäytyy kuten kerroin.

Lisäksi, kun tuosta projektista kommentoi ulos kaiken fstreamiin liittyvän, ohjelma pysyy aivan kauniisti pystyssä loppuun asti. SDLllä lienee siis jotain fstreamia vastaan -> kannattaisi kokeilla toteuttaa tuo tiedoston lukeminen C:n tiedostoapilla?
Itse olen kyllä käyttänyt SDL:ää ja fstreamia varsin hyvin yhdessä. Vika lienee koneen käyttäjässä jos homma ei pelaa...

Re: C++ -kysymykset

Posted: Fri Feb 11, 2011 4:20 pm
by JATothrim
Edit:
Feuer wrote:

Code: Select all

#include <Windows.h>
#include <fstream>
#include <iostream>

int FileSize(const char* sFileName) //kotoisin osoitteesta http://www.codeproject.com/KB/files/filesize.aspx
{
  std::ifstream f;
  f.open(sFileName, std::ios_base::binary | std::ios_base::in);
  if (!f.good() || f.eof() || !f.is_open()) { return 0; }
  f.seekg(0, std::ios_base::beg);
  std::ifstream::pos_type begin_pos = f.tellg();
  f.seekg(0, std::ios_base::end);
  return static_cast<int>(f.tellg() - begin_pos);
}


bool tulostaTavut(const char* polku)
{
	int size = FileSize(polku);

	if(size<1) //tyhjä tai olematon tiedosto :)
	{
		MessageBox(NULL,L"Tiedostohärö",L"Tiedostohärö",NULL);
		return false;
	}

	std::ifstream f(polku,std::ios::in | std::ios::binary);

	unsigned char* sisältö = new unsigned char[size];

	if(f.is_open())
	{
		f.read((char*)sisältö,size);

		for(int i=0; i<size; i++)
		{
			std::cout<<"Kohdassa "<<i<<" lukee: "<<(int)sisältö[i]<<std::endl;
		}
	}
	
	delete [] sisältö;
	
	f.close();
	return true;
}
Miksi pelkkä tuollaisen koodilohkon mukanaolo saa ohjelman kaatumaan sulkeutuessa, vaikkei sitä kutsuta? Ja mikä olisi turvallinen tapa lukea tiedostosta N tavua johonkin containeriin? Lisäksi, mikä ylläolevassa on väärin?

SDL:n ja C++:n virrat saa toimimaan normaalisti simppelisti lisäämällä:

Code: Select all

#include <SDL/SDL.h>
#undef main // ei anneta käyttää SDLmainia
SDL:n header muuttaa standardin main kierosti SDLmain:ksi.. Tällöin mm. cout/cin eivät toimi ollenkaan oikein, koska SDL:n oma main tekee jotain häröyksiä standardi virroille.
Tiedostojen lukemisesta en taas osaa sanoa.. Mihin kohtaan ohjelma tarkalleen kaatuu?
EDIT:

Piti editoida alkuperänen kysymys uudelle sivulle ja lisää vastausta:
Feuer: L"asdfasdf". L heittää merkkijonon widechater merkkijonoksi, joita MessageBoxW syö. MessageBox on makro joka voi olla MessageBoxA (Ascii) tai MessageBoxW (widechatter, unicode..). Tällä ei tosin pitäisi olla mitään merkistystä koodissasi.. Infoa vain. ;)


Re: C++ -kysymykset

Posted: Sat Feb 12, 2011 11:17 pm
by Feuer
Ohjelma kaatui aina ikkunan raksia painaessa, mikä johtaa monien resurssien vapauttamiseen ja lopulta sulkeutumiseen. Mielestäni debuggailin niin että sain selville ettei ohjelma kaatunut ennen mainin return 0; - riviä, mutta sen voinee varmistaa tulevaisuudessa...

Koodin ongelmat ovat kuitenkin eläneet koodin myötä, nykytilanne on se että Debug-käännös kaatuu kun sen sulkee SDL-ikkunasta, mutta ei kaadu jos sen sulkee komentorivi-ikkunasta ja Release-käännös on vakaa kuin junan vessa. Mikä on tämän logiikka? :D

Nuo L:t iskin MessageBoxin tekstiparametreihin koska MessageBox(NULL,"asdf","fdsa",NULL) ei mennyt kääntäjästä läpi, ja sen sijaan että olisin etsinyt dokumentaatiosta oikean tavan käyttää funktiota, muistin mitä anttipanda oli sanonut pari vuotta sitten tässä editissä.

Re: C++ -kysymykset

Posted: Sun Feb 13, 2011 1:37 am
by koodaaja
Release-versiosta jätetään osa tarkistuksista ja varoituksista pois, esimerkiksi assertit ovat voimassa vain debug-versiossa. Se kannattaakin yleensä pistää toimimaan kunnolla niin ei tule jälkikäteen ikäviä yllätyksiä kun release vuotaa muistia tai tekee jotain muuta kummallista.

L-prefiksistä pääset eroon asettamalla project->properties->configuration properties->general->character set->jotain muuta kuin "not set", multibyteä olen itse yleensä käyttänyt.

Re: C++ -kysymykset

Posted: Sun Feb 13, 2011 1:44 pm
by KilledWhale
Feuer wrote:Ohjelma kaatui aina ikkunan raksia painaessa, mikä johtaa monien resurssien vapauttamiseen ja lopulta sulkeutumiseen. Mielestäni debuggailin niin että sain selville ettei ohjelma kaatunut ennen mainin return 0; - riviä, mutta sen voinee varmistaa tulevaisuudessa...

Koodin ongelmat ovat kuitenkin eläneet koodin myötä, nykytilanne on se että Debug-käännös kaatuu kun sen sulkee SDL-ikkunasta, mutta ei kaadu jos sen sulkee komentorivi-ikkunasta ja Release-käännös on vakaa kuin junan vessa. Mikä on tämän logiikka? :D

Nuo L:t iskin MessageBoxin tekstiparametreihin koska MessageBox(NULL,"asdf","fdsa",NULL) ei mennyt kääntäjästä läpi, ja sen sijaan että olisin etsinyt dokumentaatiosta oikean tavan käyttää funktiota, muistin mitä anttipanda oli sanonut pari vuotta sitten tässä editissä.
Mysteerikaatumiset on hyvä selvitellä esimerkiksi Valgrindin avulla mikä debug-käännöksistä löytää virheet yleensä rivilleen sieltä missä ne ovat.

Re: C++ -kysymykset

Posted: Sun Feb 13, 2011 4:26 pm
by esa94
Feuer wrote:Nuo L:t iskin MessageBoxin tekstiparametreihin koska MessageBox(NULL,"asdf","fdsa",NULL) ei mennyt kääntäjästä läpi, ja sen sijaan että olisin etsinyt dokumentaatiosta oikean tavan käyttää funktiota, muistin mitä anttipanda oli sanonut pari vuotta sitten tässä editissä.
MSVC jostain syystä tykkää käyttää aina Unicode-versioita. Siksi ne L:t pitää olla.

Re: C++ -kysymykset

Posted: Tue Feb 15, 2011 6:18 pm
by Latexi95
OpenGL:ää harjoittelen käyttämään, mutta vielä on jonkun verran ongelmia...
Yritän tehdä jonkunlaista kamera luokkaa, joka hoitaisi kameran pyörittelyt, mutta jostain syystä kameran kulmien(rotation...) muuttaminen ei tunnu vaikuttavan mitenkään kameraan.
Ideana on, että kameralla on paikka (position) ja suunta (rotation) ja sen mukaan pitäisi laskea loput tarvittavat.

Code: Select all


void Camera::pushMatrix()
{
    
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluPerspective(fieldOfView*zoom,aspectRatio,nearPoint,farPoint);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    QVector3D direction(0,0,1);
    direction = direction * rotateYaw(rotation.yaw) * rotatePitch(rotation.pitch) * rotateRoll(rotation.roll);
    QVector3D up(0,1,0);
    up = up * rotateYaw(rotation.yaw) * rotatePitch(rotation.pitch) * rotateRoll(rotation.roll);
    gluLookAt(position.x,position.y,position.z,direction.x(),direction.y(),direction.z(),up.x(),up.y(),up.z());
}

QMatrix4x4 rotateYaw(qreal a)
{
    QMatrix4x4 matrix(qCos(a),-qSin(a),0,0,qSin(a),qCos(a),0,0,0,0,1,0,0,0,0,1);
    return matrix;
}
QMatrix4x4 rotatePitch(qreal a)
{
    QMatrix4x4 matrix(qCos(a),0,qSin(a),0,qSin(a),1,0,0,-qSin(a),0,qCos(a),0,0,0,0,1);
    return matrix;
}
QMatrix4x4 rotateRoll(qreal a)
{
    QMatrix4x4 matrix(1,0,0,0,0,qCos(a),-qSin(a),0,0,qSin(a),qCos(a),0,0,0,0,1);
    return matrix;
}
Tässä vielä koodi kohdasta jossa pitäisi jotain saada piirrettyä:

Code: Select all

void GLWidget::paintGL()
{

    this->setWindowTitle(QString::number(camera->rotation.yaw) + "," + QString::number(camera->rotation.pitch) + "," + QString::number(camera->rotation.roll));
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glClearColor(0.0,0.0,0.0,0.0);
    camera->pushMatrix();
    glLoadIdentity();
    glPushMatrix();
    glBegin(GL_TRIANGLES);
        glColor3f(0,1,0);
        glVertex3f(0,0,-40);
        glVertex3f(1,-1,-40);
        glVertex3f(-1,-1,-40);
    glEnd();
    glPopMatrix();
}