Anonymní profil Sejpak – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Anonymní profil Sejpak – Programujte.comAnonymní profil Sejpak – Programujte.com

 

Příspěvky odeslané z IP adresy 185.64.40.–

Sejpak
C / C++ › Trhani obrazu v SDL
13. 11. 2016   #213609

#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)

Sejpak
C / C++ › Trhani obrazu v SDL
13. 11. 2016   #213608


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 ? :-)
 

Sejpak
C / C++ › multiple definition
1. 11. 2016   #213414

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 ...

Sejpak
C / C++ › multiple definition
1. 11. 2016   #213410

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 ...

Sejpak
C / C++ › multiple definition
1. 11. 2016   #213409

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 ...

Sejpak
C / C++ › multiple definition
1. 11. 2016   #213406

#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 ...

Sejpak
C / C++ › multiple definition
31. 10. 2016   #213341
Sejpak
C / C++ › multiple definition
31. 10. 2016   #213340

zahrnuto v linkování to mám (odškrtnuté políčko použít při linkování , i použít při kompilaci)

Sejpak
C / C++ › multiple definition
31. 10. 2016   #213336

mam to tak jak jste mi napsal , ale prostě chyba je tu pořád multiple definition na všech funkcích ve třídě

Sejpak
C / C++ › multiple definition
31. 10. 2016   #213333

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ě.

Sejpak
C / C++ › multiple definition
31. 10. 2016   #213331

myslím do souboru main.cpp kde je includovana i knihovna SDL

Sejpak
C / C++ › multiple definition
31. 10. 2016   #213330

no protože je soubor .H includovan do souboru .cpp . A i kdž sem to tam zkoušel dát tak se to neopravilo.

Sejpak
C / C++ › multiple definition
31. 10. 2016   #213326

#8 Sejpak
tam jakoby všechny funkce vypisujou že sou multiple definition , tam to byl jen přesný příklad chyby

Sejpak
C / C++ › multiple definition
31. 10. 2016   #213325

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 :-)

Sejpak
C / C++ › multiple definition
31. 10. 2016   #213320

za zmínku stojí ještě že používám dev c++ 4.9.9.2

Sejpak
C / C++ › multiple definition
31. 10. 2016   #213319

#4 Sejpak
přesně co to píše :např :   multiple definition of `Cihla::nakreslit(SDL_Surface*)'   

first defined here 

Sejpak
C / C++ › multiple definition
31. 10. 2016   #213317

#3 Sejpak
prosím berte ohled na tu upravu ... 

Sejpak
C / C++ › multiple definition
31. 10. 2016   #213316

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 :(

Sejpak
C / C++ › multiple definition
31. 10. 2016   #213293

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

 

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032022 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý