小编Raf*_*fay的帖子

使用双指针进行动态分配

我有一个基类玩具和派生类Toy_remote_car和Toy_battery_car.

我这样做:

Toy** ptr;
ptr=new Toy*;
ptr[0]=new Toy_remote_car[1];
ptr[1]=new Toy_battery_car[1];/*this is completely wrong according to my teacher because i never created ptr[1]. Instead this is a misuse of memory according to him.*/
Run Code Online (Sandbox Code Playgroud)

上面的代码(ptr = new Toy*)正在创建一个类型为Toy(ptr [0])的指针,它包含派生类Toy_remote_car的对象.

现在我想写这样的代码:

- >不应预定义玩具类型指针的数量.

- >而我会调用add_toy函数,它会创建一个指向我想要的对象类型的ptr.此外,如果我再次调用add_toy函数,它不应该将数据分配给previos ptr,但它应该创建一个新的ptr.以下约定可能有所帮助:

ptr[0]=new Toy_remote_car[1];
/*we want to add more toys so add_toy function called. A check is applied.*/
/*The check checks that ptr[0] already contains a value so it creates another pointer ptr[1]*/
ptr[1]=new Toy_battery_car[1];
Run Code Online (Sandbox Code Playgroud)

- >此外,我将能够访问所有以前的数据.简而言之:

ptr[0]//contains one …
Run Code Online (Sandbox Code Playgroud)

c++ pointers memory-leaks memory-management new-operator

4
推荐指数
1
解决办法
2万
查看次数

使用OpenGl ES 2.0进行模板处理

我试图找出一种方法来切出背景纹理的某个区域,以便在屏幕上不为该背景渲染某个自定义图案.例如: 在此输入图像描述

这个方块可以是任何图案.我正在使用Frame Buffer Object和Stencil Buffer来实现这种效果.这是代码:

fbo.begin();
//Disables ColorMask and DepthMask so that all the rendering is done on the Stencil Buffer
Gdx.gl20.glColorMask(false, false, false, false);
Gdx.gl20.glDepthMask(false);
Gdx.gl20.glEnable(GL20.GL_STENCIL_TEST);
Gdx.gl20.glStencilFunc(GL20.GL_ALWAYS, 1, 0xFFFFFFFF);
Gdx.gl20.glStencilOp(GL20.GL_REPLACE, GL20.GL_REPLACE, GL20.GL_REPLACE);

stage.getSpriteBatch().begin();
rHeart.draw(stage.getSpriteBatch(), 1); //Draws the required pattern on the stencil buffer

//Enables the ColorMask and DepthMask to resume normal rendering
Gdx.gl20.glColorMask(true, true, true, true);
Gdx.gl20.glDepthMask(true);

Gdx.gl20.glStencilFunc(GL20.GL_EQUAL, 1, 0xFFFFFFFF);
Gdx.gl20.glStencilOp(GL20.GL_KEEP, GL20.GL_KEEP, GL20.GL_KEEP);

background.draw(stage.getSpriteBatch(), 1); //Draws the background such that the background is not rendered on the required pattern, …
Run Code Online (Sandbox Code Playgroud)

opengl-es framebuffer stencil-buffer opengl-es-2.0 libgdx

4
推荐指数
1
解决办法
3529
查看次数

在Python模块中初始化静态列表的最佳方法

我有两个Python模块:user.py和lib.py. lib.py包含以下列方式编写并从user.py模块调用的某些函数:

def foo1():
    pass

def foo2():
    pass

def foo3():
    pass
Run Code Online (Sandbox Code Playgroud)

现在我想在lib.py模块中添加一个静态字符串列表,以便lib.py模块中的所有函数都可以使用它们.我想以下列方式严格初始化字符串列表:

string_list = []
string_list.append('string1')
string_list.append('string2')
string_list.append('string3')
string_list.append('string4')
Run Code Online (Sandbox Code Playgroud)

实现这一目标的最恐怖的方法是什么?是否有可能做到这样的工作就好了?

string_list = []
string_list.append('string1')
string_list.append('string2')
string_list.append('string3')
string_list.append('string4')

def foo1():
        print string_list[0]

    def foo2():
        print string_list[1]

    def foo3():
        print string_list[2]
Run Code Online (Sandbox Code Playgroud)

python static list python-2.7

4
推荐指数
1
解决办法
1万
查看次数

Git:从现有存储库中创建Git子模块,并反映对子存储库的父更改

请注意,我是Git的新手.

我有两个回购:

  1. Libgdx REPO
  2. gdx-sqlite REPO

主存储库是Libgdx REPO,我的所有工作都进入了这个存储库,主要是在gdx-sqlite项目中.由于我希望gdx-sqlite项目作为一个单独的存储库出现,我所做的是:

  1. 在GitHub上创建了一个新的repo(gdx-sqlite REPO)
  2. 在我的机器上创建了一个本地仓库(嵌套在本地libgdx仓库中)
  3. 将本地嵌套repo的所有代码推送到远程gdx-sqlite REPO

这导致一切都出错了,我认为嵌套存储库是主要的罪魁祸首.后来我删除了本地嵌套存储库并恢复到之前的提交.我发现这种问题的解决方案是Git Submodules但是我完全迷失了我想要实现的目标,如下所示.

现在我应该如何根据以下内容实现这一目标:

  1. 我想创建一个位于"gdx-sqlite REPO"的新repo,它应该始终反映我对位于" https://github.com/mrafayaleem/libgdx/tree/master/extensions/gdx-sqlite "的项目所做的更改."
  2. 任何向"gdx-sqlite REPO"发送Pull请求的人都应该能够获取所有依赖项(即完整的libgdx REPO),以便他可以立即处理该扩展.

怎么可以这样做?

git github repository git-submodules

3
推荐指数
1
解决办法
2045
查看次数

在reduce函数中传递两个以上的参数

我知道Python reduce只接受带有两个参数的函数.但是,有没有办法让函数可以使用两个以上的参数?我不想让它成为一个全局变量,因为这对所有其他导入都是可见的.以下代码段可能有助于描述问题(请阅读代码段中的注释):

# The reduce function
def apply_something(something, config):
    # Consrtuct a class object based on the truth value of some other variable.
    # some_var can be changed and is being accessed in different threads so its 
    # not safe to make it global. The reduce function is being called from 
    # inside some other function so It would be better to make 
    # some_var only accessible in the function context.

    if some_var:
        obj = Klass(some_var)
    else:
        obj = Klass() …
Run Code Online (Sandbox Code Playgroud)

python reduce python-import

3
推荐指数
1
解决办法
3046
查看次数

使用二进制搜索改善插入排序的最坏情况运行时间

while循环使用线性搜索向后扫描.但是,我们知道while循环中的数组已经排序.因此,我们可以用二进制搜索替换线性搜索,以便O(n)将变为O(lg n).但是,我对此的看法是它不会有助于减少总体时间,因为我们仍然需要将元素向前移动一个索引,这将始终采用(向后步骤数(n))次.总的来说,运行时间保持为O(n ^ 2),并且在这种情况下无法实现O(n lg n).如果我以错误的方式接近这个,请告诉我.

INSERTION-SORT(A)

 for j = 2 to length[A]
  do key = A[j]
     i = j - 1

  while i > 0 and A[i] > key
    A[i+1] = A[i]
    i = i - 1

  A[i+1] = key
Run Code Online (Sandbox Code Playgroud)

algorithm binary-search insertion-sort

2
推荐指数
1
解决办法
9171
查看次数

libgdx中帧缓冲区的结果不明确

我在libgdx中使用FrameBuffer类得到以下奇怪的结果.

在此输入图像描述

以下是产生此结果的代码:

// This is the rendering code
@Override
public void render(float delta) {
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT | GL20.GL_DEPTH_BUFFER_BIT);

    stage.act();
    stage.draw();

    fbo.begin();
    batch.begin();
    batch.draw(heart, 0, 0);
    batch.end();
    fbo.end();  

    test = new Image(fbo.getColorBufferTexture());
    test.setPosition(256, 256);
    stage.addActor(test);
}

//This is the initialization code
@Override
public void show() {
    stage = new Stage(Gdx.graphics.getWidth(), Gdx.graphics.getHeight(), false);
    atlas = Assets.getAtlas();
    batch = new SpriteBatch();

    background = new Image(atlas.findRegion("background"));     
    background.setFillParent(true); 
    heart = atlas.findRegion("fluttering");
    fbo = new FrameBuffer(Pixmap.Format.RGBA8888, heart.getRegionWidth(), heart.getRegionHeight(), false);

    stage.addActor(background);
    Image temp = new Image(new …
Run Code Online (Sandbox Code Playgroud)

opengl fbo opengl-es framebuffer libgdx

2
推荐指数
1
解决办法
2251
查看次数

在Java中将对象转换为数组

可能重复:
如何在Java中将对象数组转换为字符串数组

我收到一个Object并将其转换为String数组,如下所示:

Object values[] = (Object[])request.getSession().getAttribute("userList");
String[] tmp = new String[values.length];
for(int i = 0; i < tmp.length; ++i) {
     tmp[i] = (String) values[i];
     out.println(tmp[i]);
}
Run Code Online (Sandbox Code Playgroud)

有没有更好,更清洁的方法来做到这一点?

java arrays casting

1
推荐指数
1
解决办法
1万
查看次数