所以这是我的问题。我在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
而无法发送?我只需要创建一个单独的函数来提高速度吗?
答案 0 :(得分:0)
不确定您使用的是哪种设计模式,但声音需要控制器来控制敌方物体。因此,基本上每当水平改变时,水平obj应该告诉控制器,现在敌人应该提高速度。然后控制器将通知敌人。