我将如何向此代码添加构造函数。

时间:2015-11-13 21:54:00

标签: c++ openframeworks

嘿我正在努力制作这个太空游戏。现在我开发了我的船,并且能够显示它。但是我希望能够将该类用于多个对象。我可以使用构造函数执行此操作但不知道如何使构造函数工作,我需要对代码进行哪些更改以使对象将int值作为构造函数并允许我使用代码生成多个调用该对象。

这是我的头文件。        //     // Ship.hpp     // Zerg_Invasion     //     //由Flik Wolf于11/9/15创建。     //     //

#ifndef Ship_h
#define Ship_h

#include <stdio.h>

#include "ofMain.h"

class Ship {
public:
    // Constructor
    Ship();

    // Methods
    void moveLeft();
    void moveRight();
    void load();
    void draw();
    void fire();
    void keyPressed();

    // Properties
    int x;
    int y;
    ofColor color;
    ofImage cat;
};



#endif

这是我的CPP文件。

//
//  Ship.cpp
//  Zerg_Invasion
//
//  Created by Flik Wolf on 11/9/15.
//
//

#include "Ship.h"

Ship::Ship() {
    // Set the initial color
    //color.set( ofRandom(255), ofRandom(255), ofRandom(255));

    // Initial x position of the ball
    x = 450;

    // Initial y position of the ball
    y = 200;
}

void Ship::moveLeft() {
    x -= 10;

}

void Ship::moveRight() {
    x += 10;

}

void Ship::load() {
    cat.load("spaceShip.png");
}

void Ship::draw() {
    cat.draw(x, y);
//  ofCircle(x, y, 30);

}

void Ship::fire() {
    ofSetColor(255, 255, 255);
    ofCircle(x, 200, 2);
}

这里也是我用于图形的Openframeworks的.h和.cpp文件。

#pragma once

#include "ofMain.h"
#include "Ship.h"

class ofApp : public ofBaseApp {

public:
    void setup();
    void update();
    void draw();

    void keyPressed(int key);
    void keyReleased(int key);
    void mouseMoved(int x, int y);
    void mouseDragged(int x, int y, int button);
    void mousePressed(int x, int y, int button);
    void mouseReleased(int x, int y, int button);
    void mouseEntered(int x, int y);
    void mouseExited(int x, int y);
    void windowResized(int w, int h);
    void dragEvent(ofDragInfo dragInfo);
    void gotMessage(ofMessage msg);


    Ship theShip;


};


#include "ofApp.h"

//--------------------------------------------------------------
void ofApp::setup() {
    // Smooth edges
    ofEnableSmoothing();

    // Fixed framerate
    ofSetFrameRate(120);

    theShip.load();

    // No need to define the initial position of the ball
    // because the Ball constructor does it for you
}

//--------------------------------------------------------------
void ofApp::update() {
    // theShip.move();
}

//--------------------------------------------------------------
void ofApp::draw() {
    ofBackground(0);
    std::vector <int> nums;
    nums.push_back(0);
    nums.push_back(1);
    nums.push_back(3);
    nums.push_back(4);
    nums.push_back(5);
    nums.push_back(6);
    nums.push_back(7);
    nums.push_back(8);

    cout << nums[0] << endl;
    cout << nums[1] << endl;

    theShip.draw();
}

//--------------------------------------------------------------
void ofApp::keyPressed(int key) {
    if (key == 'a')
    {
        theShip.moveLeft();
    }
    if (key == 'd')
    {
        theShip.moveRight();
    }
}


//--------------------------------------------------------------
void ofApp::keyReleased(int key) {

}

//--------------------------------------------------------------
void ofApp::mouseMoved(int x, int y) {

}

//--------------------------------------------------------------
void ofApp::mouseDragged(int x, int y, int button) {

}

//--------------------------------------------------------------
void ofApp::mousePressed(int x, int y, int button) {
    theShip.fire();
}

//--------------------------------------------------------------
void ofApp::mouseReleased(int x, int y, int button) {

}

//--------------------------------------------------------------
void ofApp::mouseEntered(int x, int y) {

}

//--------------------------------------------------------------
void ofApp::mouseExited(int x, int y) {

}

//--------------------------------------------------------------
void ofApp::windowResized(int w, int h) {

}

//--------------------------------------------------------------
void ofApp::gotMessage(ofMessage msg) {

}

//--------------------------------------------------------------
void ofApp::dragEvent(ofDragInfo dragInfo) {

}

2 个答案:

答案 0 :(得分:1)

如前所述,你的案例中的构造函数应该只产生一个的船,这应该是所有对象构造函数的情况。

但是,如果您使用像std::vector这样的容器,那么创建和维护多艘船(就像您已实施它们一样)仍然很容易。

包含多艘船:

要为您的船只创建容器,您可以使用这样的矢量:

std::vector<Ship> Ships;

添加新船:

要向其添加其他船只,您可以使用std::vector::push_back()

Ships.push_back(Ship()); //Adds a new ship to 'Ships'

更新船只:

有几种方法可以在您的船上循环:

for (auto& i : Ships) 
    i.Update(); //Some updating function for each ship

或者,如果您需要跟踪矢量中每艘船的具体位置:

for (unsigned int i = 0; i < Ships.size(); ++i)
    Ships[i].Update() //The same updating function

答案 1 :(得分:0)

如何将xy作为构造函数参数?

<。>文件中的

struct Ship {
    // Constructor
    Ship(int _x = 450, int _y = 200);
// ...

在cpp文件中:

Ship::Ship(int _x, int _y) : x{_x}, y{_y} {
    // Set the initial color
    //color.set( ofRandom(255), ofRandom(255), ofRandom(255));

}