我有一个基本上是游戏的java程序.它有一个名为"世界"的类 ."World"类有一个方法'levelChanger()',另一个方法'makeColorArray()'.
public class World {
private BufferedImage map, map1, map2, map3;
private Color[][] colorArray;
public World(int scrWd, int scrHi) {
try {
map1 = ImageIO.read(new File("map1.png"));
map2 = ImageIO.read(new File("map2.png"));
map3 = ImageIO.read(new File("map3.png"));
} catch (IOException e) {
e.printStackTrace();
}
map = map1;
makeColorArray();
}
private void makeColorArray() {
colorArray = new Color[mapHi][mapWd]; // resetting the color-array
for(int i = 0; i < mapHi; i++) {
for(int j = 0; j < …Run Code Online (Sandbox Code Playgroud) 我下载了 SFML,然后将其所有标头复制到usr/local/include/中,并将其所有库复制到usr/local/lib/中。
我在桌面中有一个名为main.cpp的文件,我想编译它。
首先我这样做了:-
g++ -c main.cpp
Run Code Online (Sandbox Code Playgroud)
之后,当我尝试这样做时:-
g++ main.o -o sfml-app -lsfml-graphics -lsfml-window -lsfml-system
Run Code Online (Sandbox Code Playgroud)
它给了我:-
/usr/local/lib/libsfml-window.so: undefined reference to `udev_device_get_action@LIBUDEV_183'
/usr/local/lib/libsfml-window.so: undefined reference to `udev_list_entry_get_next@LIBUDEV_183'
/usr/local/lib/libsfml-window.so: undefined reference to `udev_unref@LIBUDEV_183'
/usr/local/lib/libsfml-window.so: undefined reference to `udev_list_entry_get_name@LIBUDEV_183'
/usr/local/lib/libsfml-window.so: undefined reference to `udev_enumerate_unref@LIBUDEV_183'
/usr/local/lib/libsfml-window.so: undefined reference to `udev_monitor_unref@LIBUDEV_183'
/usr/local/lib/libsfml-window.so: undefined reference to `udev_new@LIBUDEV_183'
/usr/local/lib/libsfml-window.so: undefined reference to `udev_monitor_receive_device@LIBUDEV_183'
/usr/local/lib/libsfml-graphics.so: undefined reference to `std::__throw_out_of_range_fmt(char const*, ...)@GLIBCXX_3.4.20'
/usr/local/lib/libsfml-window.so: undefined reference to `udev_device_get_devnode@LIBUDEV_183'
/usr/local/lib/libsfml-window.so: undefined reference to `udev_monitor_enable_receiving@LIBUDEV_183'
/usr/local/lib/libsfml-window.so: undefined …Run Code Online (Sandbox Code Playgroud) 我试图制作一个JPanel,它会显示你按下每个导航键的次数,但它只显示4个零.
//在keyPressed()方法中,我将以下代码相应地处理按键:
public void keyPressed(KeyEvent event)
{
if(event.getKeyCode()==KeyEvent.VK_LEFT)
left++;
else if(event.getKeyCode()==KeyEvent.VK_RIGHT)
right++;
else if(event.getKeyCode()==KeyEvent.VK_UP)
up++;
else if(event.getKeyCode()==KeyEvent.VK_DOWN)
down++;
}
Run Code Online (Sandbox Code Playgroud)
//用于在JPanel上绘制计数的paint方法
public void paintComponent(Graphics g)
{
super.paintComponent(g);
g.drawString ( Integer.toString(left), 100, 100 );
g.drawString ( Integer.toString(right), 200, 100 );
g.drawString ( Integer.toString(up), 100, 200 );
g.drawString ( Integer.toString(down), 200, 200 );
}
Run Code Online (Sandbox Code Playgroud) void Player::draw(sf::RenderTarget& target, sf::RenderStates states) const
{
sf::CircleShape c0;
c0.setFillColor(sf::Color::Red);
c0.setPointCount(4);
c0.setRadius(1);
c0.setPosition(sf::Vector2f(point[0].x, point[0].y));
sf::CircleShape c1;
c1.setFillColor(sf::Color::Red);
c1.setPointCount(4);
c1.setRadius(1);
c1.setPosition(sf::Vector2f(point[1].x, point[1].y));
target.draw(c0);
target.draw(c1);
}
Run Code Online (Sandbox Code Playgroud)
我正在学习c ++.正如您所看到的,我在draw方法中创建CircleShape对象,该方法在一秒钟内运行60次.我在网上读到c ++中的对象存储在堆内存中,因此需要手动释放.当draw方法返回时,对象c0和c1是否被破坏并释放内存,还是会继续占用堆内存?
如果你有一个名为'Rock'的课程,你可以这样做: -
int main()
{
Rock;
}
Run Code Online (Sandbox Code Playgroud)
你为什么得到"声明没有声明什么"的错误?
它不应该只调用默认构造函数并在那一刻创建对象吗?
当然,我将无法使用该对象,当它超出函数范围时会被破坏,但为什么不创建它呢?
在其他一些编程语言中,如java,变量不是强制性的.你可以做一些像新摇滚()的事情,你会没事的.
我知道这没什么用,但我想澄清我的困惑.
以下程序中World对象的构造函数被调用两次.
头文件:
#ifndef GAME_H
#define GAME_H
#include "World.h"
class Game
{
public:
Game();
private:
World world;
};
Run Code Online (Sandbox Code Playgroud)
cpp文件: -
#include "Game.h"
Game::Game()
{
world = World();
}
Run Code Online (Sandbox Code Playgroud)
世界级的头文件: -
#ifndef WORLD_H
#define WORLD_H
class World
{
public:
World();
};
#endif // WORLD_H
Run Code Online (Sandbox Code Playgroud)
世界级的cpp文件: -
#include "World.h"
#include <iostream>
using namespace std;
World::World()
{
cout<<"i am going to print twice"<<endl;
}
Run Code Online (Sandbox Code Playgroud)