Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

21

31.08.2010, 14:01

hab die release erstellt und den ordner verschickt. funktioniert auch nicht.
i-ne datei fehlt ..

Gibt das Programm denn irgend eine Fehlermeldung bei deinem Freund aus? Vielleicht sogar, welche Datei noch benötigt wird?
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

MCP

Alter Hase

Beiträge: 513

Wohnort: Paderborn

Beruf: Software-Entwickler

  • Private Nachricht senden

22

01.09.2010, 14:22

Sieht so aus als wäre OpenAL nicht installiert, wird aber benötigt... ^^
Man kann mit dem Tool "depends" auch herausfinden welche Abhängigkeiten eine Exe hat. Selbiges geht auch mit dem "ProcessExplorer" von MS

23

02.09.2010, 16:34

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
int punktespieler1 = 0;
    int punktespieler2 = 0;
    sprintf (Buffer, "&i &i", punktespieler1, punktespieler2);
    sf::Font Punktestand;   
    Punktestand.LoadFromFile("comicbd.ttf", 50);
    sf::String Text (Buffer, Punktestand, 30);
    Text.SetColor(sf::Color(128, 128, 0));
    Text.SetScale(2.f, 2.f);
    Text.Move(300.f, 200.f);

Fenster.Draw(Text);
guck dir mal an wie die Funktion richtig funktioniert ;) http://www.cplusplus.com/reference/clibrary/cstdio/sprintf/

und ansonsten is nen stream sicherlich die schönere version: http://www.cplusplus.com/reference/iostream/ostringstream/
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

24

02.09.2010, 19:37

MSVCR100.dll fehlt.
runterladen und in den release-ordner schieben wird wohl nicht reichen oder? ^^

Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

25

02.09.2010, 19:58

MSVCR100.dll fehlt.
runterladen und in den release-ordner schieben wird wohl nicht reichen oder? ^^

Probiers doch mal, eig. schon :o
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

26

03.09.2010, 19:38

hehe... ich habs mal runtergeladen und in den release ordner gepackt. ich habs noch keinem ´geschickt, aber bei mir steht da jetzt, dass irgendein prozesdureinsprungspunkt in der MSVCR100.dll fehlt^^
dann hab ich die datei wieder rausgenommen, und es ging bei mir wieder...


EDIT: um hier nicht das ganze forum vollzumüllen schreib ich dieses kleiner problem grad hier dabei:
ich habe eine CGame::Run() - funktion, die ein sf::RenderWindow Fenster erzeugt und dann halt so ziemlich alles macht, was im programm passiert.
jetzt wollte ich der übersichtlichkeit wegen einen teil dieser funktion in eine CGame::Move() funktion auslagern, die aber auch das RenderWindow Fenster kennen muss. also hab ich in der deklaration ein CGame::Move(sf::RenderWindow Fenster) draus gemacht, und im funktionsaufruf (der in CGame::Run() stattfindet) eben Move(Fenster) draus gemacht.
also wenn ich mich da nicht extrem täusche müsste das so funktionieren :D.
aber anscheinend gibts bei der sfml ne besonderheit oder so, es kommt nämlich folgender error:

Zitat

error C2248: "sf::NonCopyable::NonCopyable": Kein Zugriff auf private Member, dessen Deklaration in der sf::NonCopyable-Klasse erfolgte.
1> c:\users\benny\desktop\c++\sfml-1.6\include\sfml\system\noncopyable.hpp(57): Siehe Deklaration von 'sf::NonCopyable::NonCopyable'
1> c:\users\benny\desktop\c++\sfml-1.6\include\sfml\system\noncopyable.hpp(41): Siehe Deklaration von 'sf::NonCopyable'
1> Diese Diagnose trat in der vom Compiler generierten Funktion "sf::Window::Window(const sf::Window &)" auf.
Bevor ich die funktion ausgelagert hab, hat sie noch funktioniert.
wenn ich mein Fenster global erzeuge und in den funktionen nicht das fenster übergebe (was meines erachtens auch funktionieren müsste) blinkt das fenster nur kurz auf und schließt sich dann wieder.

hilfe? :D

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »bewa« (04.09.2010, 01:02)


Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

27

04.09.2010, 02:16


hilfe? :D

Der veränderte Code zum nachvollziehen?
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

28

04.09.2010, 02:34

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
void CGame::Run()
{
    sf::Event Event;
    sf::RenderWindow Fenster(sf::VideoMode(800, 600, 32), "World Hardest Game");

    while (Fenster.IsOpened())
    {
        while (Fenster.GetEvent (Event))
            {if (Event.Type == sf::Event::Closed)
                Fenster.Close();
            if ((Event.Type == sf::Event::KeyPressed) && (Event.Key.Code == sf::Key::Escape))
                Fenster.Close();
            }

        Move(Fenster);
        [...]
   }
}

void CGame::Move(sf::RenderWindow Fenster)
{
    for (levelspritenr = 0; levelspritenr < 8; levelspritenr  ++)
    {
        if (showlevel[levelspritenr] == true)
        {
            if (Fenster.GetInput().IsKeyDown(sf::Key::Up) && (!Collision(spieler,randOben))
                && (((spieler.GetPosition().y > (levelsprite[levelspritenr].GetPosition().y + levelsprite[levelspritenr].GetScale().y))
                || (spieler.GetPosition().y + spieler.GetScale().y) < levelsprite[levelspritenr].GetPosition().y)
                || spieler.GetPosition().x > (level1.GetPosition().x + levelsprite[levelspritenr].GetScale().x)
                || (spieler.GetPosition().x + spieler.GetScale().x) < levelsprite[levelspritenr].GetPosition().x))
                {
                    spieler.Move(0.f, -150.f * Fenster.GetFrameTime());
                    while (Collision(spieler, levelsprite[levelspritenr]))
                        spieler.Move(0.f, 1.f);
                }
    }
}


sonst noch was? hab einige unwichtige sachen rausgenommen, damit ihr das wichtige schneller seht..^^

29

04.09.2010, 11:51

Oha, gaaaanz böse!

Zum einen übergibt man das RenderWindow schon mal nicht an irgendwelche Funktionen (Move(), Render(), ...) und zum anderen, wenn man es machen würde dann per Referenz und nicht mit Call By Value. Das würde sonst bedeuten, dass das ganze Objekt für jeden Funktionsaufruf der das Fenster braucht kopiert würde und das bei jedem Schleifendurchlauf erneut.

Das Render Window legt man auch nicht in der Funktion Run() an, da läuft doch nur das Spiel, mehr nicht. Genauso kapselt man normaler Weise das EventHandling noch mal in einer Funktion um die Übersicht zu behalten.

Mach dir also erstmal noch einige Gedanken zur Klassenstruktur deines Spiels.

Gruß
SaRu_

30

04.09.2010, 13:02

ich versteh nicht wirklich was du mir sagen willst ;)

also das Fesnter nicht der funktion übergeben. ich habs also jetzt global gemacht(im grunde muss ja eh fast jede Funktion das Fenster kenn), aber beim kompilieren kommt dann, es seit nicht deklariert.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include "SFML/Graphics.hpp"
#include <iostream>
using namespace std;
#include "Game.h"

sf::RenderWindow Fenster(sf::VideoMode(800, 600, 32), "World Hardest Game");

int main()
{

    CGame Game;
    Game.Init();
    Game.Run();

    return EXIT_SUCCESS;

}

Werbeanzeige

Ähnliche Themen