background-image

Alles rund um die Programmierung mit Qt
Antworten
Mr.Burns
Beiträge: 7
Registriert: 18. Mai 2010 13:27

background-image

Beitrag von Mr.Burns »

Hallo zusammen,
ihr kennt doch bestimmt das Spiel Space Invaders.

Da gibt es dieses bewegende Hintergrundbild...damit es aussieht, als ob die schiffe sich wirklich bewegen würden.
Das passende Bild hab ich...hat jemand vllt eine Idee wie ich dieses als bewegend realisieren könnte?

Gruß Mr.Burns
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Re: background-image

Beitrag von franzf »

Mr.Burns hat geschrieben:Da gibt es dieses bewegende Hintergrundbild...damit es aussieht, als ob die schiffe sich wirklich bewegen würden.
Das passende Bild hab ich...hat jemand vllt eine Idee wie ich dieses als bewegend realisieren könnte?
Kommt drauf an. Wenn das Bild ein Tiled Brush ist, also das Bild ganz oft nebeneinander und untereinander gemalt werden soll, macht du das mit z.B. dem QPainter::brushOrigin().
Wenn das Bild ein gaaaanz großes ist, das als "eine Welt" konzipiert ist, dann malst du mit QPainter::drawPixmap() nur eine Ausschnitt, den du vorher berechnet hast.

Du kannst auch mit QGraphicsScene arbeiten, und bei Schiffbewegungen das Hintergrundbild bewegen.

Wie hast du denn vor dein Spiel umzusetzen? Schon eine Strategie? Schonmal die Examples durchforstet?
Mr.Burns
Beiträge: 7
Registriert: 18. Mai 2010 13:27

Beitrag von Mr.Burns »

Danke für die schnelle antwort....
also nein Exaples noch nicht wirklich durchsucht...
Und naja das Spiel ist schon so gut wie fertig....
ich willeinfach nur dass das hintergrundbild sich jederzeit so nach vorne bewegt...
ich schick das bild mal dazu..
Dateianhänge
background.jpg
background.jpg (45.88 KiB) 3169 mal betrachtet
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

Du könntest jetzt sagen wie du dein bisher fertiges Programm umgesetzt hast, wie du die Schiffchen malst, usw.
Und ich hab dir ja auch shcon ein paar Anhaltspunkte gegeben.

Du wirst wohl auch einen QTimer haben wollen, der dir alle 50ms ein Signal zum Neuzeichnen gibt, damit sich der Hintergrund fließend bewegt.

Anstatt des Bidchens wäre eine genauere Problemstellung und Code nicht schlecht gewesen ;)
Mr.Burns
Beiträge: 7
Registriert: 18. Mai 2010 13:27

Beitrag von Mr.Burns »

Code: Alles auswählen

spiel::spiel (QWidget * w = 0):QDialog(w){
   s = new schiff(this);
   g = new gegner(this);
   s->show();
   this->setStyleSheet("background: url('background.jpg')");
   g->show();
   su = NULL;
   sug = NULL;

}

void spiel::timerEvent(QTimerEvent * event){
   if (event->timerId() == myTimerId){
       s->bewege(richtung);

       if (g != NULL){
         g->bewege();
         if (sug == NULL){

            sug = new schuss_gegner( g->getx(), g->gety(), this);
            sug->show();
           }
     }
      if (su != NULL){

         su->bewege();
         if (((su->pos().x() >= g->pos().x()) && (su->pos().x() <= g->pos().x()+40) && (su->pos().y() <= g->height()))){
          //delete su;
          //su = NULL;
          delete g;
          g = NULL;
          g = new gegner(this);
          g->show();



         }

      if (su->gety() < 1) {
         delete su;
         su = NULL;
      }
      }

      if(sug != NULL) {
          sug->bewege();
        if (sug->pos().y() >= s->pos().y() && sug->pos().y() <= s->pos().y()+40 && sug->pos().x() >= s->pos().x() && sug->pos().x() <= s->pos().x()+40)
          {
              close();
              game_over *a = new game_over;
              a->show();
          }
          if(sug->gety() >600) {
              delete sug;
              sug = NULL;
          }
      }
}

Hilft dir das weiter?
Ist die Klasse mit dem Bild als Pixmap und dem timer
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

Nicht wirklich, weil da nix zeichnest oder genaueres über die involvierten Klassen verrätst.
Ich hab dir auch schon ein paar Anhaltspunkte gegeben. Versuch das mal umzusetzen, dann kann man konkret helfen. Im jetzigen Stadium wäre Hilfe wohl gleich die Lösung - und die willst du ja selber hinbekommen ;)
Also: Wenn dein Spielfeld von QWidget erbt, wäre der erste Schritt ein paintEvent - da kannst du selber malen.
Mr.Burns
Beiträge: 7
Registriert: 18. Mai 2010 13:27

Beitrag von Mr.Burns »

Hat geklappt, danke.
Antworten