Seite 1 von 1

background-image

Verfasst: 19. Mai 2010 13:59
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

Re: background-image

Verfasst: 19. Mai 2010 14:21
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?

Verfasst: 19. Mai 2010 14:28
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..

Verfasst: 19. Mai 2010 14:36
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 ;)

Verfasst: 19. Mai 2010 15:42
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

Verfasst: 19. Mai 2010 16:05
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.

Verfasst: 20. Mai 2010 09:54
von Mr.Burns
Hat geklappt, danke.