2016-07-18 26 views
0

QtでTower Defenceゲームを作成しています。 私の塔は叫んで弾丸クラスを産んでいます。この弾丸のクラスで 弾丸に触れる敵がありますなら、私に検出することができますその周りのポリゴンがある:Qt QGraphicsItemからクラスを呼び出す

QList<QGraphicsItem*> colliding_items=collidingItems(); 
for(int i=0,n=colliding_items.size();i<n;i++){ 
    if(typeid(*(colliding_items[i]))==typeid(Enemy)) 
    { 
    //<------------ HERE ? 
    scene()->removeItem(this); 
    delete this; 
    return; 
    } 
} 

私はreceiveDamage(int damage)というヘッダーファイルEnemy.h内の関数を作成:

void Enemy::reciveDamage(int damage){ 
    m_health -= damage; 
    if(m_health <= 0){ 
     game->scene->removeItem(this); 
     delete this; 
     return; 
    } 
} 

Ennemy.hの内容:

#ifndef ENEMY_H 
#define ENEMY_H 

#include <QGraphicsPixmapItem> 
#include <QObject> 
#include <QList> // list << element 
#include <QPointF> 

class Enemy: public QObject, public QGraphicsPixmapItem{ 
    Q_OBJECT 
public: 
    Enemy(QGraphicsItem * parent=0); 
    void rotateToPoint(QPointF p); 
    void reciveDamage(int damage); 
public slots: 
    void move_forward(); 
private: 
    QList<QPointF> points; 
    QPointF dest; 
    int point_index; 
    int m_speed = 2; 
    int m_health = 100; 
}; 

#endif // ENEMY_H 

しかし、私はTHERアップ私のコードでそれを呼び出す方法がわかりません電子、任意のアイデア? Enemyクラスに

+0

あなたのコードスニペットの例:スコープ(一部の詳細およびコンテキストを与える、としてくださいあなたの敵のクラスの定義) – Dreamcooled

答えて

2

はい、ちょうどdynamic_castまたはqobject_castQGraphicsItem、その上にgetDamageを呼び出します。

私は被害額が​​という名前のメソッドで与えられると仮定した場合、コードは次のようになります。

QList<QGraphicsItem*> colliding_items=collidingItems(); 
for(int i=0, n=colliding_items.size(); i<n; i++){ 
    if(typeid(*(colliding_items[i])) == typeid(Enemy)) 
    { 
     Enemy* enemy = qobject_cast<Enemy*> (colliding_items[i]); 
     if (enemy) 
     { 
      enemy->getDamage(this->sendDamage()); 
     } 
     scene()->removeItem(this); 
     delete this; 
     return; 
    } 
} 
+0

作業thxxxx!しかし、あなたはそれを忘れています: – noonana

+1

また、 'dynamic_cast'の代わりに' qgraphicsitem_cast'または 'qobject_cast'を使うことを検討してください。 Qtのやり方をすることができるときに、RTTIを追加する必要はありません。 – Dreamcooled

+0

@Frodon 'qgraphicsitem_cast'は、[QGraphicsItem :: type](http://doc.qt.io/qt-5/qgraphicsitem .html#type)、それが私がすぐに編集を提案しなかった理由です。 – Dreamcooled

関連する問題