Hi,
Ich hoffe ihr nehmt mir so eine frage nicht übel, aber seit Tagen bin ich am versuchen und Googlen und es kommt einfach nichts zu stande.
Ich vermute/hoffe es sind nur Startschwierigkeiten und ich schaffe es dann selber.
Das Problem ist, ich habe keine Ahnung wie ich das anstellen soll.
Ich habe zwar ein Tutorial gefunden, aber das benutzt QCanvas und das wurde ja jetzt durch dieses neue Framwork mit QGraphicsScene, QGraphicsView und QGraphicsItem ersetzt, und dazu finde ich nicht wirklich viel.
Mir ist inzwischen klar, dass ich ne QGraphicsScene brauche, die durch ein QGraphicsView angezeigt wird. Meine Probleme sind jetzt aber, wie bekomme ich die einzelnen Tiles (also die 32*32 Pixel großen Geländepaletten), in die Scene.
Ich habe ein Bitmap, da sind alle Tiles drin, dieses Bitmap müsste dann in 32*32 große Quadrate zerschnitten werden, und diese als einzelne Items der Scene hinzugefügt werden.
Und dann markierbar sein, damit man sie in einem 2ten Graphics-View zu einer Karte zusammen setzen kann.
und Ich habe eben einfach keinen Plan, wie ich das Machen soll.
gruß Ryu
2D- Map Editor schreiben
Ungetestet:
Code: Alles auswählen
class MapPart : public QGraphicsItem
{
MapPart(QGraphicsScene *scene, QPixmap &pix, int x, int y)
: QGraphicsItem(scene), m_pix(pix), m_x(x), m_y(y) {};
~MapPart() {};
QRectF boundingRect() const { return QRectF(0, 0, 32, 32); };
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
painter->drawPixmap(0, 0, m_pix, m_x*32, m_y*32, 32, 32);
}
private:
QPixmap m_pix;
int m_x;
int m_y;
};
Danke, ich habe jetzt etwas in den Startlöchern, dazu habe ich mir 2 Klassen von QGraphicsScene und QImage abgelitten.
Aber nun habe ich ein Problem, und zwar folgendes:
error: cannot declare variable `Temp' to be of type `Tile' because the following virtual functions are abstract: virtual QRectF QGraphicsItem::boundingRect() const
Was heißt das, und was ist Falsch?
Hier der Header der Tile-Klasse:
und hier die Implementierung:
Aber nun habe ich ein Problem, und zwar folgendes:
error: cannot declare variable `Temp' to be of type `Tile' because the following virtual functions are abstract: virtual QRectF QGraphicsItem::boundingRect() const
Was heißt das, und was ist Falsch?
Hier der Header der Tile-Klasse:
Code: Alles auswählen
#ifndef TILE_H
#define TILE_H
#include <QGraphicsItem>
#include <QImage>
#include <QRectF>
class Tile : public QGraphicsItem
{
public:
Tile();
Tile(QImage *nPic, int nNumber, int xx = 0, int yy = 0, int ww = 32, int hh = 32);
void setImage(QImage *nPic);
void setNumber(int nNumber);
void setProperties(int xx, int yy, int ww, int hh);
QImage *getPic();
QRectF boundingRect();
void paint ( QPainter * painter, const QStyleOptionGraphicsItem * option, QWidget * widget = 0 );
private:
int x, y, w, h;
int Number;
QImage *Pic;
};
#endif // TILE_H
Code: Alles auswählen
QRectF Tile::boundingRect(){
return QRectF(0,0,32,32);
}Tschuldigung, dass ich das jetzt mit nem Doppelpost pushe, aber sonst sieht es keiner.
Ich bekomme es einfach nicht hin. Ich habe das Projekt schon Frustriert in die Ecke geschmissen, aber es ist mir zu wichtig, und deshalb versuche ich es jetzt nochmal.
Hier mein Problem:
Ich habe eine Klasse Tile. Diese Klasse ist von QGraphicsItem abgelitten, und hat eine Pixmap, für das entsprechende Kartentile. Außerdem x und y Koordinaten für die Map (weil da 0/0 links oben sein wird).
Außerdem habe ich eine von QGraphicsscene abgelittene Klasse Tileset, die hat eigentlich nur die Methode, nämlich loadTileSet, und die sieht so aus:
Wenn ich das TileSet aber von nem QGraphicsView anzeigen lasse, dann isses leer, und ich weiß einfach nicht warum.
Wenn ich von außen auf die Entsprechende instanz von TileSet zugreife, und die Methode add Item benutze funktioniert das.
Also muss irgendwo in dieser Funktion was falsch sein. Ich hoffe ihr könnt mir helfen.
Ach ja, ich habe das schonmal debuggt, der stürzt erst nach dem Verlassen der Funktion ab, irgendwo in dem QT Code, der da generiert wird.
Ich bekomme es einfach nicht hin. Ich habe das Projekt schon Frustriert in die Ecke geschmissen, aber es ist mir zu wichtig, und deshalb versuche ich es jetzt nochmal.
Hier mein Problem:
Ich habe eine Klasse Tile. Diese Klasse ist von QGraphicsItem abgelitten, und hat eine Pixmap, für das entsprechende Kartentile. Außerdem x und y Koordinaten für die Map (weil da 0/0 links oben sein wird).
Außerdem habe ich eine von QGraphicsscene abgelittene Klasse Tileset, die hat eigentlich nur die Methode, nämlich loadTileSet, und die sieht so aus:
Code: Alles auswählen
void TileSet::loadTileSet(QString Path, int w , int h){
QPixmap TileSetPic(Path);
QPixmap TilePic;
QPainter Painter(&TilePic);
int TilesW = TileSetPic.width() / w;
int TilesH = TileSetPic.height() / h;
if(TileSetPic.isNull()){
QMessageBox::critical(NULL, QString("Editor"), QString("Bild konnte nicht geladen werden"));
}
for(int i = 0;i < TilesW;i++){
for(int k = 0;k < TilesH;k++){
Painter.drawPixmap(0,0,TileSetPic, i*w, k*h, w, h);
addItem(new Tile(&TilePic, getNumber(i, k, TilesW), i, k, w, h));
//QMessageBox::information(NULL, "Test", "Komm ich überhaupt hier an?");
}
}
//QMessageBox::information(NULL, "Mist", "bin da");
}Wenn ich von außen auf die Entsprechende instanz von TileSet zugreife, und die Methode add Item benutze funktioniert das.
Also muss irgendwo in dieser Funktion was falsch sein. Ich hoffe ihr könnt mir helfen.
Ach ja, ich habe das schonmal debuggt, der stürzt erst nach dem Verlassen der Funktion ab, irgendwo in dem QT Code, der da generiert wird.