简体   繁体   中英

Global variable "x" does not exist, Processing 3.2.3. Processing and Kinect

I was beginning with coding in Processing when I encountered an error which I can't find a solution for.

**DISCLAIMER: I'm new to coding, so I'm having trouble understanding how it works lol

I was attempting to use processing to write a code for a kinect program that would create a ripple effect, but I can't figure out how to define two variables.

Code:

// A simple ripple effect. Click on the image to produce a ripple
// Author: radio79
// Code adapted from http://www.neilwallis.com/java/water.html
// Code adapted from https://forum.processing.org/two/discussion/25348/can-i-apply-ripple-effect-to-kinect

import org.openkinect.processing.*;

Kinect kinect;


PImage img;
Ripple ripple;

void setup() {
  size(1920, 1080);
  kinect = new Kinect(this);
  kinect.initVideo();
 
  img = new PImage(kinect.colorWidth, kinect.colorHeight);

  ripple = new Ripple();
  //frameRate(60);
}

void draw() {

  image(kinect.getVideoImage(), 0, 0);

  img.loadPixels();

  for (int loc = 0; loc < Kinect.colorWidth * Kinect.colorHeight; loc++) {
    img.pixels[loc] = ripple.col[loc];
  }


  img.updatePixels();
  ripple.newframe();
}

class Ripple {
  int i, a, b;
  int oldind, newind, mapind;
  short ripplemap[]; // the height map
  int col[]; // the actual pixels
  int riprad;
  int rwidth, rheight;
  int ttexture[];
  int ssize;

  Ripple() {
    // constructor
    riprad = 3;
    rwidth = width >> 1;
    rheight = height >> 1;
    ssize = width * (height + 2) * 2;
    ripplemap = new short[ssize];
    col = new int[width * height];
    ttexture = new int[width * height];
    oldind = width;
    newind = width * (height + 3);
  }



  void newframe() {
    // update the height map and the image
    i = oldind;
    oldind = newind;
    newind = i;

    i = 0;
    mapind = oldind;
    for (int y = 0; y < height; y++) {
      for (int x = 0; x < width; x++) {
        short data = (short)((ripplemap[mapind - width] + ripplemap[mapind + width] + 
          ripplemap[mapind - 1] + ripplemap[mapind + 1]) >> 1);
        data -= ripplemap[newind + i];
        data -= data >> 5;
        if (x == 0 || y == 0) // avoid the wraparound effect
          ripplemap[newind + i] = 0;
        else
          ripplemap[newind + i] = data;

        // where data = 0 then still, where data > 0 then wave
        data = (short)(1024 - data);

        // offsets
        a = ((x - rwidth) * data / 1024) + rwidth;
        b = ((y - rheight) * data / 1024) + rheight;

        //bounds check
        if (a >= width) 
          a = width - 1;
        if (a < 0) 
          a = 0;
        if (b >= height) 
          b = height-1;
        if (b < 0) 
          b=0;

        col[i] = img.pixels[a + (b * width)];
        mapind++;
        i++;
      }
    }
  }
}

void mouseDragged() {
  for (int j = mouseY - ripple.riprad; j < mouseY + ripple.riprad; j++) {
    for (int k = mouseX - ripple.riprad; k < mouseX + ripple.riprad; k++) {
      if (j >= 0 && j < height && k>= 0 && k < width) {
        ripple.ripplemap[ripple.oldind + (j * width) + k] += 512;
      }
    }
  }
}

The error is: 'The global variable "x" does not exist', 'The global variable "y" does not exist' and so forth. Please help.

The variables I need help defining appear on line 18 for the first time, they are colorWidth and colorHeight

The line reads:

  img = new PImage(kinect.colorWidth, kinect.colorHeight);

The colorWidth and colorHeight are underlined in red.

I have tried using this method:

public 
 float colorWidth;
 float colorHeight;

But, only the second line appears to be defined properly. The first line emits the message "colorWidth cannot be resolved or is not a field" when the program runs, or "illegal modifier for parameter colorWidth; only final is permitted" when the underline is clicked. Picture of what the program shows after the public code

PLEASE HELP!!! Thank you!

The keyword public here just means nothing, it must be said of a function or variable. And you just don't need it. So removing it should fix the problem!

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM