在仔细阅读网页并弄乱自己之后,我似乎无法将void*的目标(这是一个字符串)转换为std :: string.我尝试使用此页面的sprintf(buffer, "%p", *((int *)point));建议来获取C字符串,但无济于事.遗憾的是,是的,我必须使用void*,因为这是SDL在其USEREVENT结构中使用的.
对于那些感兴趣的人,我用来填充Userevent的代码是:
std::string filename = "ResumeButton.png";
SDL_Event button_press;
button_press.type = BUTTON_PRESS;
button_press.user.data1 = &filename;
SDL_PushEvent(&button_press);
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
编辑:感谢所有的回复,我只需要将void*转换为std :: string*.傻我.非常感谢你们!
我把一个简单的测试项目放在一起,显示一个包含EditText的PopupWindow(在Android 2.2上).当我点击EditText时,会显示软键盘,正如我所料.但是,软键盘覆盖了EditText,我无法让屏幕平移,以便按照我认为的方式保持EditText.我的代码:
TestAdjustPanActivity.java:
package com.example;
import android.app.Activity;
import android.graphics.drawable.BitmapDrawable;
import android.os.Bundle;
import android.view.Gravity;
import android.widget.PopupWindow;
public class TestAdjustPanActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final PopupWindow pw = new PopupWindow(this);
pw.setContentView(getLayoutInflater().inflate(R.layout.popup, null, false));
pw.setWidth(400);
pw.setHeight(600);
pw.setFocusable(true);
pw.setOutsideTouchable(true);
pw.setTouchable(true);
pw.setBackgroundDrawable(new BitmapDrawable());
// This is the line referred to in the edit:
pw.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
findViewById(R.id.main).post(new Runnable() {
public void run() {
pw.showAtLocation(findViewById(R.id.main), Gravity.NO_GRAVITY, 0, 0);
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
main.xml中:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/main"
android:layout_width="fill_parent"
android:layout_height="fill_parent" …Run Code Online (Sandbox Code Playgroud) 在针对a的Android文档中PopupWindow,setIgnoreCheekPress()提到了该方法.它说这个方法"设置弹出窗口上的标志来忽略脸颊按压事件;默认情况下,这个标志设置为false,这意味着流行音乐不会忽略脸颊按发送事件."
很简单,什么是cheek press dispatch event?
我最近在GLSL中写了一个Phong着色器作为学校作业的一部分.我从教程开始,然后使用代码,直到我开始工作.据我所知,它的工作完全正常,但我特别写了一行,我不明白它为什么会起作用.
顶点着色器:
#version 330
layout (location = 0) in vec3 Position; // Vertex position
layout (location = 1) in vec3 Normal; // Vertex normal
out vec3 Norm;
out vec3 Pos;
out vec3 LightDir;
uniform mat3 NormalMatrix; // ModelView matrix without the translation component, and inverted
uniform mat4 MVP; // ModelViewProjection Matrix
uniform mat4 ModelView; // ModelView matrix
uniform vec3 light_pos; // Position of the light
void main()
{
Norm = normalize(NormalMatrix * Normal);
Pos = Position;
LightDir = …Run Code Online (Sandbox Code Playgroud) 我有一个名为Object的基类.PhysicsObject继承自Object.Ball继承自PhysicsObject,而SoftBall继承自Ball.像这样的东西:
Object
|
PhysicsObject
|
Ball
|
SoftBall
Run Code Online (Sandbox Code Playgroud)
我有一个名为foo()的方法,它在Object中声明为虚拟(给定一个实现,因此不是纯虚拟),然后在PhysicsObject和Ball中再次声明和实现为虚拟.最后,SoftBall再次实现foo()而不将其声明为虚拟.
如果我有一个指向SoftBall的Object*,那么将调用SoftBall的foo()版本吗?如果没有,有没有办法达到这个效果?基本上,多态的这个方面是否仍然可以在多个继承级别上工作?
基本上,在程序终止之前将存在的表面上,我是否需要SDL_FreeSurface()为每个表面运行,或者会SDL_Quit()为我处理所有这些事情?
SDL_FreeSurface()我问这个问题主要是因为指向我的许多表面的指针是类成员,因此如果我想在它们各自的表面上运行,我需要跟踪每个类实例(在全局数组或其他东西中) 。如果 SDL_Quit() 能为我一下子完成这一切,我宁愿这样做:D
注意:这是我在此问过的早期问题的扩展:是否有其他函数/方法定义会增加程序的内存占用量?
当我编写一个类时,我通常最终会编写几个测试/调试方法,用于确保类按预期工作,或者用于打印数据以帮助调试,或用于单元测试等.是否有简单/自动没有这些方法进行发布的方法,或者我是否需要在编译发布版本时手动删除额外的代码?
我从C++和Java的角度提出这个问题.我正在使用Code :: Blocks和Eclipse作为IDE,如果它以某种方式起到答案的作用.
在C++中,我有一个Object类,其中许多其他类继承(即Ball,Paddle和Wall).有没有办法让Object类上的静态成员被每个子类作为单独的静态成员继承?
基本上,我希望Ball,Paddle和Wall每个都有一个静态成员(用于存储绘图的图像),它们是从Object继承的(因为存储图像的数组是所有对象的常见要求),但静态成员是每个球,桨和墙分开.这样每个Ball实例都可以访问球图像,每个Paddle都可以访问球拍图像,依此类推.
如果这不可能,那么允许类似功能的好方法是什么?
编辑:
关于我实际想要完成的更多细节:
我正在进行突围克隆.我有一个Object类,所有游戏对象都从该类继承(Ball,Paddle,Block和Wall).所有这些对象都有一些他们需要访问的图像以便绘制自己(这是由Object*对std :: list中的所有对象完成并在所有对象上运行虚拟方法updateAndDraw()).
现在,Ball,Paddle,Block和Wall都有一个静态的sf :: Texture(来自SFML)数组,它存储了对象所需的所有图像.它是静态的,因为每个类的所有实例都可以共享图像,并且为每个实例单独加载它们将浪费内存.在第一次构造每个相应游戏对象时,图像被加载并存储在阵列中.
对于所有游戏对象,图像加载和存储功能基本相同,因此我想将其从每个单独的游戏对象移到对象上.我的计划是在Object上有一个静态成员,每个游戏对象都会继承,并且这个静态成员对于Ball,Paddle,Block和Wall中的每一个都是独立的,虽然它现在看起来像这样可能不起作用.我也会在Object上调用一个静态方法loadImages(string filenames[]),它会获取一个图像文件名数组,并将图像加载到loadImages()被调用的游戏对象的静态图像数组中.所以在Ball构造函数中,如果我运行loadImages()并传递了一些文件名,它会将图像加载到Ball的静态图像数组中,并且相同(独立地)加载所有其他游戏对象.
在输入这一切之后,我意识到将图像存储在其他地方可能会更好,并且只是给游戏对象提供指向那些图像的指针.这消除了图像数组是静态的需要,并且在构造函数中我可以在存储图像的任何内容上调用函数并将其传递给对象类型,它将向我提供一个指向游戏图像的指针数组对象需要.
我知道并理解全局变量和幻数是编程时要避免的事情,特别是当项目中的代码量增加时.然而,我无法想到一个避免两者的好方法.
Say I have a pre-determined variable representing the screen width, and the value is needed in multiple files. I could do...
doSomethingWithValue(1920);
Run Code Online (Sandbox Code Playgroud)
But that's a magic number. But to avoid that, I'd do...
const int SCREEN_WIDTH = 1920;
//In a later file...
extern const int SCREEN_WIDTH;
doSomethingWithValue(SCREEN_WIDTH);
Run Code Online (Sandbox Code Playgroud)
And now I'm using a global variable. What's the solution here?
假设我有一个名为prop的成员的myObject类.我有一个变量var,可能是也可能不是myObject.我想检查prop是否包含某个值,如果是,则执行某些操作,如果没有,或者var不是myObject,请执行.
执行以下操作是否安全:
if isinstance(var, myObject) and var.prop == 10:
#Do something
Run Code Online (Sandbox Code Playgroud)
基本上,如果第一部分的计算结果为False,是否可以保证不会检查if语句的第二部分?如果检查即使var不是myObject,也会引发错误.
我正在创建一个TextField类,它目前存储对变量的引用,并且每当程序员想要时,它们都可以调用TextField.show(),并且将在屏幕上读取和显示引用的变量.
但是,如果引用无效,则会导致问题.例如,如果引用的变量超出范围,我就遇到了问题.
基本上,有没有办法确保用户提供一个不会失效的引用?或者,有没有更好的方法来设置这个系统?或者如果没有,在这种情况下处理无效引用的最佳方法是什么?
c++ ×7
java ×3
android ×2
c ×2
inheritance ×2
oop ×2
boolean ×1
debugging ×1
flags ×1
glsl ×1
ide ×1
if-statement ×1
logic ×1
methods ×1
object ×1
opengl ×1
pointers ×1
polymorphism ×1
popupwindow ×1
printf ×1
python ×1
reference ×1
release ×1
scope ×1
sdl ×1
shader ×1
static ×1
string ×1
surface ×1
virtual ×1
xml ×1