franzf hat geschrieben:Ich werd immer noch nicht schlau...
*) ist BitBlt deine eigene Funktion?
*) Warum setzt du komplett andere Werte als in der Deklaration (jedenfalls in der Fehlermelsung) angegeben?
*) Soll das Pixmap als BackgrounRole in die Palette wandern oder
*) soll aus der Palette ein BackgroundRole extrahiert und ins Bitmap gesetzt werden?
*) Was hat das alles mit CollisionDetection zu tun?
Und am wichtigsten:
*) Was ist deine eigentlich Frage/Problem?
Code: Alles auswählen
spiel::spiel (QWidget * w = 0):QDialog(w)
{
s = new schiff(this);
s->show();
s->set_life(80);
myTimerId = startTimer(15);
setAutoFillBackground(true);
palette.setBrush(QPalette::Window, QBrush(QPixmap(statEnv+"lvl1.jpg")));
this->setPalette(palette);
anzeige = new QLabel(this);
//set_anzeige("Game start ",true);
anzeige->setStyleSheet("QLabel{background-color: white; color: black;font-size: 20px;}");
anzeige->setFixedWidth(1024);
anzeige->move(0,0);
anzeige->show();
}
void spiel::timerEvent(QTimerEvent * event)
{
QPixmap t = QPixmap::grabWindow(this->winId(), s->get_x(), s->get_y(), 1, 1);
QRgb color = t.toImage().pixel( 0,0 );
if(color == 4278255361)
s->set_collision(true);
if (event->timerId() == myTimerId)
{
if( (s->tastenbuffer[0] == false) &&
(s->tastenbuffer[1] == false) &&
(s->get_status() == true ) &&
(s->get_ufoGif() != statEnv + "ufo.gif") )
{
s->set_ufoGif(0);
}
}
else
{
QWidget::timerEvent(event);
}
s->bewege();
Es handelt sich um ein Spiel (lander) wo mittels Pfeiltasten ein Ufo navigiert wird.
Falls das UFO auf das grüne Feld gelangt soll es explodieren.
das funktioniert auch jetzt soweit mittels dieser Überprüfung:
Code: Alles auswählen
QPixmap t = QPixmap::grabWindow(this->winId(), s->get_x(), s->get_y(), 1, 1);
QRgb color = t.toImage().pixel( 0,0 );
if(color == 4278255361)
s->set_collision(true);
Gibt es eine Möglichkeit über diese grüne Fläche
(rot sind die Landeflächen) eine Textur zu legen und trotzdem die grüne Farbe ausgelesen werden kann?