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
background-image
Re: background-image
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().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?
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?
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..
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 (45.88 KiB) 3166 mal betrachtet
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
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
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
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.
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.