我有两个2D游戏对象.它们每个都有一个Box Collider 2D和一个不是运动学的刚体2D.当游戏进行时,一个人向另一个移动并与之相撞.
但是,我在移动GameObject中也有以下方法:
void OnCollisionEnter(Collision collision)
{
print( "Collided with someone" );
}
Run Code Online (Sandbox Code Playgroud)
print语句永远不会打印,因此可能从未调用过该方法.我哪里错了?
也许我误解了继承如何在这里工作,但这是我的问题:
我有一个类Option,以及一个派生自它的类RoomOption.我有另一个课室,里面有一个shared_ptrs的矢量.在主要内容中,我向该向量添加了一个RoomOption.然后,使用typeid()我检查类型,它告诉我它的选项.根据我的阅读,typeid应该返回派生类型,而shared_ptrs不会导致切片,所以我不确定我做错了什么.
这是代码:
Room.h:
vector<shared_ptr<Option> > options;
void addOption(shared_ptr<Option>);
shared_ptr<Option> getOption(int);
Run Code Online (Sandbox Code Playgroud)
Room.cpp:
void Room::addOption(shared_ptr<Option> option){
options.push_back(option);
}
shared_ptr<Option> Room::getOption(int i){
return options[i];
}
Run Code Online (Sandbox Code Playgroud)
主要:
shared_ptr<Room> outside(new Room(0, "", ""));
outside->addOption(shared_ptr<RoomOption>(new RoomOption(0, "Go inside", hallway)));
cout<<typeid(player->getRoom()->getOption(0)).name().get()<<endl;
//This line prints "class std::tr1::shared_ptr<class Option>
Run Code Online (Sandbox Code Playgroud)
在我看来,可能在添加或获取选项时,由于返回/参数类型,RoomOption被转换为选项.如果是这种情况那么我应该如何存储多种类型的矢量?或者我错了吗?= \
我正在尝试使用增强现实制作一个在相机上显示GPS点的Windows Phone应用程序.我一直在寻找在线教程,但我找不到任何解释如何做的地方.我想知道是否有人知道任何解释将AR与GPS相结合的好教程,或者是否有人可以给我任何关于从哪里开始的提示(我不希望有详细的解释或任何内容).即使是关于如何使用Android的教程也是一个开始.
所以,我有一个类存储指向对象的指针.我有一个方法,可以向对象添加对象.添加时,我知道我可以通过引用或指针传递,并阅读了每个的优点和缺点,但在这种情况下,我无法弄清楚哪一个更好,为什么.对于我可以弄清楚的一切,他们几乎是一样的(但我可能错了!)
这是(一个释义)传递指针/地址:
hpp:
class Room {
vector<Item*> items;
public:
void addItem(Item*);
};
cpp:
void Room :: addItem(Item* item) {
items.push_back(item);
}
Run Code Online (Sandbox Code Playgroud)
......并通过引用传递:
hpp:
class Room {
vector<Item*> items;
public:
void addItem(Item &);
};
cpp:
void Room :: addItem(Item &item) {
items.push_back(&item);
}
Run Code Online (Sandbox Code Playgroud)
我应该使用哪个?
我想知道,如果我使用new关键字在main中创建一个对象,然后将该对象(指针)设置为由另一个类的成员指向,将原始指针设置为null,我将在哪里删除已分配的内存?我可以在第二个类的析构函数中做到这一点,但如果该对象没有动态分配怎么办?
一些代码作为例子:
World world;
Player* newPlayer = new Player("Ted");
world.setPlayer(newPlayer);
newPlayer = 0;
Run Code Online (Sandbox Code Playgroud)
所以现在World中的'player'成员变量指向newPlayer分配的内存,newPlayer指向null.当我完成World对象时,我应该如何释放这个内存?
我有一个shared_ptrs的向量.我正在把auto_ptrs放进去.这没关系还是事情会破裂?
Room.hpp:
vector<shared_ptr<Item>> items;
void addItem(auto_ptr<Item>);
Run Code Online (Sandbox Code Playgroud)
主要:
room.addItem(auto_ptr<Item>(new Item(...)));
Run Code Online (Sandbox Code Playgroud) 我收到以下错误:
指向vector.h的size()方法.使用此方法时似乎会发生:
void Player::printInventory(){
if(inventory.size() != 0){
for(unsigned int i=0; i<inventory.size(); i++){
cout<<inventory[i] << endl;
}
}
}
Run Code Online (Sandbox Code Playgroud)
完整代码:
Player.h:
#pragma once
#include <vector>
#include <memory>
using namespace std;
class Player
{
private:
int health;
string name;
vector<int> inventory;
public:
Player(void);
Player(string);
~Player(void);
void changeHealth(int);
void addToInventory(int);
void removeFromInventory(int);
void printInventory();
};
Run Code Online (Sandbox Code Playgroud)
Player.cpp:
#include "Player.h"
#include <iostream>
#include <string.h>
Player::Player(void)
{
health = 20;
}
Player::Player(string newName)
{
name = newName;
health = 20;
}
Player::~Player(void)
{
}
void …Run Code Online (Sandbox Code Playgroud)