(Qt)如何使用其他函数的值?

时间:2016-04-20 16:33:39

标签: c++ qt

所以这是我的问题。我在Qt中制作了一个非常简单的游戏,但是我在增加游戏难度方面遇到了麻烦。例如,一旦你的分数达到某个值,你就升级了。在游戏中,文本会发生变化并说出第2级,但游戏并没有变得更难。我有想法通过让敌人移动更快来实现这一目标。我让敌人以预定值移动,但我希望位置变化等于值"速度"在Level.cpp中。答案可能是面对我,但它是最简单的答案,总是让我。下面是一个标题和2个源文件,它们连接Level.cpp和Enemy.cpp。

Enemy.cpp

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="20dp"
        android:background="@android:color/white"
        android:orientation="vertical">

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="@drawable/images" />

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="10dp">

            <Button
                android:id="@+id/btnBuy"
                android:layout_width="80dp"
                android:layout_height="40dp"
                android:layout_alignParentRight="true"
                android:layout_alignParentTop="true"
                android:background="@android:color/holo_green_light"
                android:text="BUY"
                android:textColor="@android:color/white" />

            <TextView
                android:id="@+id/txtTitle"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_toLeftOf="@+id/btnBuy"
                android:text="Thank You (Domestic Album Version)"
                android:textColor="@android:color/black"
                android:textStyle="bold" />

            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_below="@+id/txtTitle"
                android:text="Still Not Gettin' Any, 2004" />

        </RelativeLayout>
    </LinearLayout>

    <ImageButton
        android:id="@+id/btnClose"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:background="@android:color/black"
        android:src="@android:drawable/ic_menu_close_clear_cancel" />


</RelativeLayout>

Level.cpp

#include "Enemy.h"
#include <QTimer>
#include <QGraphicsScene>
#include <QList>
#include <stdlib.h> 
#include "Game.h"
#include "Level.h"

extern Game * game;

Enemy::Enemy(QGraphicsItem *parent): QObject(), QGraphicsPixmapItem(parent){
    //set random x position
    int random_number = rand() % 700;
    setPos(random_number,0);

    // drew the rect
    setPixmap(QPixmap(":/images/enemy.png"));
    setTransformOriginPoint(50,50);

    // make/connect a timer to move() the enemy every so often
    QTimer * timer = new QTimer(this);
    connect(timer,SIGNAL(timeout()),this,SLOT(move()));

    // start the timer
    timer->start(30);
}

void Enemy::move(){
    // move enemy down
    setPos(x(),y()+7);
    //Instead of 7 above, use speed from Level.cpp

    // destroy enemy when it goes out of the screen
    if (pos().y() > 600){
        //decrease the health
        game->health->decrease();
        scene()->removeItem(this);
        delete this;
    }
}

Level.h

#include "Level.h"
#include "Enemy.h"
#include <QFont>

Level::Level(QGraphicsItem *parent): QGraphicsTextItem(parent){
    // initialize the score to 0
    level = 1;
    speed = 5;
    // draw the text
    setPlainText(QString("Level: ") + QString::number(level)); // Level: 0
    setDefaultTextColor(Qt::green);
    setFont(QFont("times",16));
}

    void Level::LevelUp(){
        level++;
        speed = speed+2;
        setPlainText(QString("Level: ") + QString::number(level)); // Level: 1
    }

    int Level::getLevel(){
        return level;
        return speed;
    }

感谢您提供任何帮助,如果可能的话,您可以深入解释您为解决问题所采取的措施。

编辑:我的问题是尝试发送速度,但由于级别功能标记为#ifndef LEVEL_H #define LEVEL_H #include <QGraphicsTextItem> class Level: public QGraphicsTextItem{ public: Level(QGraphicsItem * parent=0); int getLevel(); void LevelUp(); int speed; //speed is public because I got "int is private" errors on a few things I tried. private: int level; }; #endif // LEVEL_H 而无法发送?我只需要创建一个单独的函数来提高速度吗?

1 个答案:

答案 0 :(得分:0)

不确定您使用的是哪种设计模式,但声音需要控制器来控制敌方物体。因此,基本上每当水平改变时,水平obj应该告诉控制器,现在敌人应该提高速度。然后控制器将通知敌人。