簡體   English   中英

我將如何向此代碼添加構造函數。

[英]How Would I add a constructor to this code.

嘿,我正在嘗試制作這個太空游戲。 現在我已經開發了我的船,並且能夠展示它。 但是,我希望能夠將該類用於多個對象。 我可以用構造函數來做到這一點,但不知道如何讓構造函數工作,我需要對我的代碼進行哪些更改才能使對象采用 int 值作為構造函數,並允許我使用代碼制作多艘船調用對象。

這是我的頭文件。 // // Ship.hpp // Zerg_Invasion // // 由 Flik Wolf 於 2015 年 11 月 9 日創建。 // //

#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) {

}

object constructors.如前所述,您的情況下的構造函數應該只生產艘船,對象構造函數應該如此。

但是,如果您使用像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

如何獲取xy作為構造函數參數?

在 .h 文件中:

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));

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM