#1 Sejpak
jinak mohu dát i zdrojový kod hry ... pokud by se na to někdo chtěl mrknout proč se to tak trhá (mám GPU 1070)
Příspěvky odeslané z IP adresy 185.64.40.–
Ahoj , mám ve hře raketu a ta když narazí na cihlu tak se začne vykreslovat takový jednoduchý "výbuch" . Ten výbuch je několik iterací ve smyčce while aby se postupně zvětšoval a funkce vypada takhle :
int vybuch(SDL_Surface* screen,int x,int y,int velikost)
{
int pom;
pom = Lock(screen);
for(int i = 0;i < 10;i++)
kruznice(screen,x,y,velikost+i,255,255,255);
if(pom == 1)
SDL_UnlockSurface(screen);
if(velikost+9 == 50)
return 1;
else
return 0;
}
problem je ten že když to nastane tak se hra začne hodně sekat tim padem se zpomalí i rychlost kuličky a podobně. Nenasměrujete mě trochu prosím jak bych to mohl FIXnout ? :-)
začínam mít silnou obavu že sem hlupák co tu obtěžuje přitom sem nikdy při kompilaci vlastně nezkompiloval klávesou F11 která kompiluje vše , protože například v .H udělam schválně chybu a pokud zkompiluji f9 chyba se nenajde a program běží protože soubor byl již jednou zkompilovan ale pokud zkompiluju F11 chyba se najde porotože se zkompilujou všechny soubory ...
tet mě napada jedna věc , mačkal sem vždy F9 což znamená zkompilovat , a klavesa F11 znamena zkompilovat vše , je dost možne že tady byl problem ale teda opravdu nevím jak to ...
blbě se to vysvětluje ale právě sem zkopíroval a smazal kod klavesou ctrl+x a vložil ho tam znova a najednou se to rozchodilo , nevím co si o tom mám myslet ...
#19 BDS
neříkám že to nechci , asi přejdu na visual studio nebo Qt creator :-) (5.11 sem zkoušel a dělá zde probelmy SDL) . a jinak pravěže v kodu nic duplicitně neni jestli myslíš jako že je to dedinovano několikrat . i jsem zkoušel jak si psal že do cpp teda dam ty metody a do .H prototypy do class . a prostě to píše multiple definition ...
zde se to řešilo ale moc tomu nerozumim : http://stackoverflow.com/…-from-multip
zahrnuto v linkování to mám (odškrtnuté políčko použít při linkování , i použít při kompilaci)
mam to tak jak jste mi napsal , ale prostě chyba je tu pořád multiple definition na všech funkcích ve třídě
tak ale i když sem to tam daval nic se nestalo , a jak říkam program funguje když funkce jsou ve třídě
ale když je dám pryč pomocí té :: tak my to píše tu chybu. takže to ani nemuže být tím includem protože by to dělalo error i pokud by funkce byly ve třídě.
myslím do souboru main.cpp kde je includovana i knihovna SDL
no protože je soubor .H includovan do souboru .cpp . A i kdž sem to tam zkoušel dát tak se to neopravilo.
nene tím to určitě není , a s tím deven , zatim to je tak že se to člověk jen učí tak je jedno co použije :-)
za zmínku stojí ještě že používám dev c++ 4.9.9.2
tady je hlavičkovej soubor :
#ifndef _BREAKER_H
#define _BREAKER_H
int Lock(SDL_Surface* screen);
void palka(SDL_Surface *screen,int x,int y,int x2,int y2);
class Cihla
{
private :
int x,y,x2,y2,red,green,blue;
bool existence;
public :
Cihla();
void nakreslit(SDL_Surface*);
void souradnice_zapis(int,int,int,int);
int souradnice_kontrola(int,int,int);
void barva(Uint8,Uint8,Uint8);
void exist_zapis();
bool exist_kontrola();
};
#endif
tady je cpp
#include <stdio.h>
#include <iostream>
#include <cmath>
#include <cstdlib>
#include <SDL/SDL.h>
#include <SDL/SDL_image.h>
#include "grafika.h"
#include "breaker.h"
int Lock(SDL_Surface* screen)
{
if(SDL_MUSTLOCK(screen))
{
SDL_LockSurface(screen);
return 1;
}
else
return 0;
}
void palka(SDL_Surface *screen,int x,int y,int x2,int y2)
{
int pom;
bool pohyb = false;
pom = Lock(screen);
for(int i = y;i <= y2;i++)
{
if(i == y || i == y2)
cara(screen,x+3,i,x2-3,i,30,34,158);
else if(i == y+1 || i == y2-1)
cara(screen,x+2,i,x2-2,i,30,34,158);
else if(i == y+2 || i == y2-2)
cara(screen,x+1,i,x2-1,i,30,34,158);
else
cara(screen,x,i,x2,i,14,16,75);
}
if(pom == 1)
SDL_UnlockSurface(screen);
}
Cihla::Cihla()
{
x = 0;
y = 0;
x2 = 0;
y2 = 0;
red = 255;
green = 255;
blue = 255;
existence = false;
}
void Cihla::nakreslit(SDL_Surface*screen)
{
for(int i = y;i <= y2;i++)
cara(screen,x,i,x2,i,red,green,blue);
}
void Cihla::souradnice_zapis(int a,int b,int a2,int b2)
{
if(a >= 0 && a2 <= 799)
{
x = a;
x2 = a2;
}
if(b >= 0 && b2 <= 599)
{
y = b;
y2 = b2;
}
}
int Cihla::souradnice_kontrola(int xkul,int ykul,int r)
{
if((ykul-10 <= y2 && ykul+10 >= y) && (xkul+10 >= x && xkul-10 <= x2) && existence == true)
{
exist_zapis();
return 1;
}
return 0;
}
void Cihla::barva(Uint8 r,Uint8 g,Uint8 b)
{
red = r;
green = g;
blue = b;
}
void Cihla::exist_zapis()
{
if(existence)
existence = false;
else
existence = true;
}
bool Cihla::exist_kontrola()
{
return existence;
}
a píše to multiple defined :(
Dobrý den , v hlavičkovem souboru definuji třídy a pokud funkce třídy dám přímo do té definice třídy vše šlape jak má ale pokud funkce dám mimo definici třídy pomocí čtyřtečky (::) například do toho hlavičkového souboru nebo specialně do dapšího .cpp souboru (tam kde jsou i definice normálních funkcí) aby to tvořilo vlastně modul napíše to chybu a píše to : multiple definition pro ty funkce v té tříde, nevíte někdo co s tím ? Mám stejnou chybu jako zde ale nerozumim jim : http://stackoverflow.com/questions/212006/multiple-definition-error-including-c-header-file-with-inline-code-from-multip